Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Test
- public void taskWorkFlow() {
- given(new Task("a", ACTIVE));
- assertTasksAre("a");
- /*
- в принципе - можно и так
- но тогда не нужна проверка после вызова гивен-метода
- мы об этом говорили в прошлых заданиях
- еще раз приведу этот кусочек ниже
- возвращайся к тест-плану своему
- и заново размечай - что где покрыто
- тут, в е2е, на all фильтре мы add - не покрыли
- это учти - когда будешь покрытие в тест-плане отмечать
- а это надо делать - чтобы разобраться
- для чего нужно писать фиче-тесты
- */
- /*
- Есть разные способы выполнять предварительные действия
- Мы сейчас делаем это через действия на UI (User Interface)
- А есть еще методы - работать непосредственно с данными (далее вы такое тоже попробуете)
- Так вот через действия на UI - предварительные действия не быстрые и часто не достаточно надежные
- А через непосредственную работу с данными - предварительные действия быстрые и надежные
- Если предварительные действия медленные или не надежные
- То проверка в конце предварительных действий нужна
- А если мы уверены - что после предварительных действий гарантировано все ОК,
- то и проверок не надо после предварительных действий
- Но, поскольку наше приложение - простое
- Разумно не делать проверку в конце предварительных действий
- чтобы наши тесты были эффективнее
- Тестировали бы что-то типа соцсети и если бы предварительные действия были
- реализованы через UI - да, после предварительных действий было бы разумно
- выполнить проверку (проверка после предварительных действий нам позволяет отличить -
- ошибка возникла на этапе выполнения тестируемого действия, или все же раньше)
- */
- *********************************
- public void editTaskActiveFilter() {
- public void deleteTaskAllFilter() {
- public void editCancelTaskAllFilter() {
- /*
- и в этих тест-методах - используй гивен-метод
- вообще - во всех тест-методах
- их будем использовать
- */
- *************************
- /*
- мы наследуем тест-класс от AtTodoMvcPageWithClearedDataAfterEachTest
- перед запуском теста - открываем наше приложение
- после - чистим локалсторидж (раньше чистили, ты сейчас это закомментарил,
- кстати, при запуске всех тестов сейчас могут быть проблемы)
- гивены можно вызывать и для варианта, когда надо задать пустой список тасок
- значит - можно вызывать в каждом тест-методе гивен-метод
- и обойтись без очистки локал сториджа после теста - вот уже облегчили код
- дальше - раз все тесты происхолят после открытия одного и того же урла
- можно вначале гивен-метода проверить
- если сейчас урл не такой, то открыть нужный урл
- этот кусочек кода можно оформить в виде метода,
- который будет вызываться вначле гивен-метода
- такого плана методы = если сейчас не так, то сделать так
- часто называют, начиная со слова ensure = обеспечить
- вот и не нужен нам код - по открытию урла в бифор-методе
- сразу вопрос - какой предок нужен тест-классу)
- вот тебе и еще одна оптимизация)
- кода меньше
- сущностей меньше
- действий лишних меньше
- */
- ***********************
- @Test
- public void editTaskActiveFilter() {
- add("a");
- filterActive();
- /*
- как переписать эти подготовительные действия с помощью гивен-метода
- given(new Task("a", ACTIVE));
- filterActive();
- на самом деле, и filterActive(); - тоже предварительное действие
- и тест-методов - у нас будет много
- мы же реализуем полное покрытие
- потому - есть цель получить лаконично организованные предварительные действия
- у тебя уже есть
- given(Task... tasks)
- а если реализовать гивен-методы для разных фильтров
- givenAtActive(Task... tasks)
- givenAtCompleted(Task... tasks)
- то и
- вместо предварительных действий
- add("a");
- filterActive();
- будешь вызывать
- givenAtActive(new Task("a", ACTIVE));
- в реализации этих новых методов - используй вызов метода given(Task... tasks)
- так код в гивен-методах - будет DRY
- т к мы не будем повторять ту же логику
- */
- ************************************
- /*
- поговорим про покрытие
- реализуем - полное покрытие
- дополняем е2е тест фиче-тестами
- до полного покрытия
- можно не оптимизировать и просто покрыть все фичи
- на всех фильтрах
- а можно - реализовать optimized full coverage
- в чем оптимизация
- - что покрыто в е2е - не покрываем фиче-тестами
- - низкоприоритетное - покрываем единожды, на каком-то из контекстов (пример - delete by emptying text)
- - низкоприоритетные варианты фичи, у которой есть покрытые варианты - не покрываем (пример - reopen all & add)
- оптимизировать или нет - сам решай
- в любом случае - приведи тест-план с указанным покрытием
- будут ситуации, когда для одной фичи - 2 или 3 теста
- используй разные тестовые ситуации в таких тестах
- например
- работаем с единственной таской
- работаем со второй таской
- работаем с таской, которая единственная видимая, но есть еще и не видимые
- это обязательно надо сделать - т к это существенно улучшит покрытие
- так мы учтем много разнообразных моментов
- */
- ********************************
- /*
- будут тесты
- в которых будет необходимость в нескольких тасках с одинаковым статусом
- мы уже можем написать
- given(new Task("a", ACTIVE), new Task("b", ACTIVE));
- а вот второй вариант - более лаконичный
- given(ACTIVE, "a", "b");
- задача - реализовать еще 3 гивен-метода
- given(TaskStatus taskStatus, String... taskTexts)
- givenAtActive(TaskStatus taskStatus, String... taskTexts)
- givenAtCompleted(TaskStatus taskStatus, String... taskTexts)
- внутри таких методов
- надо сделать то же, что ты делал в given(Task... tasks)
- просто - не ясно
- как из параметров (TaskStatus taskStatus, String... taskTexts)
- получить (Task... tasks)
- вот решим эту задачу - сможешь внутри
- given....(TaskStatus taskStatus, String... taskTexts)
- написать код в одну строчку
- given(xxx(taskStatus, taskTexts))
- в given(Task...tasks) в качестве параметра можно передавать массив Task[] tasks
- погугли про varargs in java
- http://www.linkex.ru/java/varargs.php
- реализуй метод xxx
- возвращающий Task[]
- с параметрами (TaskStatus taskStatus, String... taskTexts)
- в котором
- объяви переменную типа Task[] и инициализируй ее как массив Task[....такого-то размера....]
- какого - посмотри на параметры нашего метода
- в цикле обойди taskTexts
- и каждый элемент массива заполни с помощью метода aTask
- верни полученный массив
- а далее - используй этот метод
- внутри given...(TaskStatus taskStatus, String... taskTexts)
- given(xxx(taskStatus, taskTexts))
- Если тяжело сразу xxx реализовать -
- то для начала просто внутри givenAt....
- реализуй этот код - собери массив Task[] по переданным параметрам
- И тогда будет что-то типа такого
- Task[] tasks = ....
- ....
- ....
- ....
- given(tasks)
- */
- ************************
- /*
- в следующей версии - реализуй фиче-тесты для полного покрытия
- и используй все гивен-методы
- цель - тест-методы держать в лаконичном наглядном состоянии
- не забудь привести к следующему ревью - и тест-план
- */
Advertisement
Add Comment
Please, Sign In to add comment