Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- сразу несколько вопросов:
- 1. что я забыла проверить или что нужно проверить иначе)
- /*
- это я откомменчу по ходу сценария
- есть вопросы к использованию неявных проверко через действие
- и к проверкам списка тасок на Active и Completed фильтрах
- */
- 2. правильно ли реализована проверка assertTasksAre и assertNoTasks?
- Можно ли использовать visible или лучше делать эти методы под каждую вкладку отдельно?
- /*
- проверки assertTasksAre и assertNoTasks - можно оставить с такой реализацией
- для других фильтров - правильнее использовать проверку списка тасок, отфильтрованного по кондишену visible
- такие проверки подойдут как для Active, так и для Completed фильтра
- для принятия окончательного решения - почитай мои комментарии по ходу сценария и посмотри видео
- https://drive.google.com/file/d/0B8hgIBw8-V-AdGxxU1R3enl1RzQ/view?ts=567ab8d7
- */
- ******************************************************************
- /*
- сначала приведу общие пояснения, в коде - будут подробности
- */
- /*
- про использование неявных проверок через действие
- вариант 1
- add("task1"");
- edit("task1", "task1 edited");
- delete("task1 edited");
- вариант 2
- add("task1", "task2");
- edit("task2", "task2 edited");
- delete("task2 edited");
- Вариант 1 = правильное использование таких проверок через действие
- Вариант2 = не правильное использование
- Т к последующие действия не проверяют состояние ВСЕХ тасок в списке
- Таким образом - ты сможешь эффективно использовать неявные проверки через действия только в случае,
- если в списке тасок будет видима лишь одна таска
- Также не забывай - после каждого действия должна быть выполнена проверка
- Сразу
- Не получается использовать неявную проверку через следующее действие - используй явную
- Но - действие должно быть обязательно проверено сразу
- */
- *******************************************************************
- public class TodoMvcTest {
- @Test
- public void smokeE2ETest(){
- /*
- то, что тест реализует smoke-покрытие - это важная информация
- но - ее правильно отражать не в имени тест-метода или тест-класса
- т к smoke-покрытие может быть реализовано несколкими тест-методами, и не факт, что одного тест-класса
- дальше по курсу - будет информация, как правильно показывать это
- молодец, что видишь важность этой информации
- но - пока не надо это отражать
- насчет E2E
- глядя на кот тест-метода - мы это и так поймем
- а если не смотреть на код - инвормция о том, что тест - это E2E
- мало добавит понимания
- тут имя тест-метода можно как и в прошлой работе сделать
- ну или воспользоваться другими советами из
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.2gjiy0o1o48q
- */
- open("https://todomvc4tasj.herokuapp.com/");
- add("1", "2", "3", "4");
- assertTasksAre("1", "2", "3", "4");
- /*
- не торопись добвалять сразу несколько тасок
- ведь таким образом - становится невозможно эффекивно использовать неявные проверки
- */
- edit("2", "02");
- /*
- применив вариант
- edit("2", "2 edited");
- далее по тексту таски - будет понятно - что с ней было до этого
- используй тестовые данные для пояснений)
- так можно дать дополнительное понимание и сэкономить на комментариях
- */
- toggle("02");
- /*
- вот toggle("02") - можно было бы использовать как неявную проверку для edit("2", "02")
- если бы "02" - была единственной таской в списке
- т к toggle("02") - проверяет только состояние таски "02"
- как дела обстоят с остальными - мы не знаем
- каждая проверка - должна проверять состояние всех тасок
- так что - нужно все же пересмотреть взгляды на добавление тасок
- и пока ограничиться добавлением одной таски
- или второй вариант - необходимы проверки после каждой из операций
- первый вариант нам подходит больше - т к мы боремся за максимальную эффективность
- после toggle("02"); - тоже не хватает проверки
- т к - следующая операция не проверит закомпличивание таски
- логичнее было бы проверить тексты тасок после toggle("02");
- тем самым - мы бы проверили логику -
- что на all фильтре все таски отображаются независимо от их статуса
- а проверка списка тасок после перехода на Active фильтр -
- с одной стороны - проверит - как работает переход на филььр
- с другой - допроверит закомпличивание таски
- в целом - хорошая стратегия - начать сценарий так
- добавить таску
- отредактировать таску
- закомплитить таску
- вопросы только к проверкам
- */
- switchFilter("Active");
- /*
- почитай вот это
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
- и прими решение - как лучше реализовать методы для переходов на нужный фильтр
- */
- assertActiveTasksAre("1", "3", "4");
- /*
- вот тут - отлично получилось проверить переход на другой фильтр
- было в списке - таски "1", "02", "3", "4"
- перешли на другой фильтр
- стало в списке - таски "1", "3", "4"
- стало = правильное (условие необходимое)
- было-стало - отличаются (условие достаточное - если бы было-стало совпадали -
- мы бы не могли утверждать - что переход на фильтр работает - такое возможно, если при
- переходе на фильтр вообще ничего не происходит. потому - важно, чтобы и вот это второе условие выполнялось)
- таким образом - переход на другой фильтр проверен точно
- единственное - вот такая проверка - проверка списка тасок, отфильтрованных по классу active
- не совсем то, что нам надо
- даже если в списке будут отображаться таски с другими классами - эта проверка пройдет
- а нам надо - проверить логику - на таком-то фильтре видны такие-то таски
- т е - достаточно проверить тексты только видимых тасок
- так что - верный вопрос задала)
- да, используй проверки списка тасок, отфильтрованного по visible
- а про проверки списка, отфильтрованного по классу (active или completed)
- было в видео https://drive.google.com/file/d/0B8hgIBw8-V-AUDhxWDg1YmYxM3c/view
- примерно с 58-ой минуты
- */
- toggleAll();
- assertNoActiveTasks();
- /*
- покрыть на active фильтре - complete all - отличная идея
- если на all - не будешь добавлять лишних тасок
- то тут придется еще одну таску добавить
- также советую тут покрыть cancel edit - это тоже высокоприоритетная операция
- и хорошо впишется в этот сценарий
- хорошо, что после complete all выполнила проверку
- единственное - она у тебя изменится - будешь проверять список тасок,
- отфильтрованных по visible
- */
- switchFilter("Completed");
- /*
- вот тут - не хватает проверки
- у тебя на этот момент - не одна таска в списке
- значит - операция delete("1"); не проверит состояние всего списка тасок
- */
- delete("1");
- assertTasksAre("02", "3", "4");
- /*
- советую удаление покрыть уже после возвращения на all
- если выполнишь мои рекомендации по добавлению тасок - ты на этот фильтр придешь с 2-мя тасками
- одну активируешь, вторую удалишь через clearCompleted();
- как раз - чтобы вернуться на all хотя бы с одной таской и проверить переход на фильтр
- прикольно было бы вернуться на all с таской, созданной на active
- так бы ты дополнительно проверила - нормально на all работать с тасками,
- созданными на другом фильтре
- */
- activate("3");
- /*
- насчет имени метода - ниже обсудим
- */
- assertTasksAre("02", "4");
- assertItemsLeft(1);
- /*
- хорошо вмостила проверку assertItemsLeft
- */
- clearCompleted();
- assertNoTasks();
- /*
- что касается набора покрытых действий на этом фильтре - практически все ок
- хороший вариант
- activate
- clear completed
- вот delete - стоит перенести
- теперь арифметика
- на проверку clear completed мы потратили 2 таски (а можно было потратить лишь одну)
- и еще в конце - осталась одна
- значит - 2 из четырех добавленных тасок - можно было сэкономить)
- ты, конечно, можешь возразить что проверять complete all или clear completed -
- лучше на нескольких тасках
- да, мы так будем делать - когда будем приложение тестировать глубже
- а пока - у нас задача - написать максимально быстрый е2е, который реализует smoke покрытие
- и мы - стараемся не делать ничего лишнего
- наша задача - сказать - все высокоприоритетные операции работают
- не - все высокоприоритетные операции во всех контекстах работают
- а именно так - все высокоприоритное - работает, можно тестировать глубже
- т е - это первый быстрый фидбек
- */
- switchFilter("All");
- assertTasksAre("3");
- /*
- правильно, что вернулась на all фильтр
- единственное - уже тут стоило покрывать удаление таски
- если учесть все рекомендации выше - то перед переходом на all -
- у нас останется единственная активная таска
- и опять мы получим хорошую ситуацию для проверки перехода на фильтр -
- разные было-стало у списка тасок
- */
- }
- ************************************************************
- ElementsCollection tasks = $$("#todo-list li");
- /*
- селектор можно написать точнее "#todo-list>li"
- в этом простом приложении - не критично
- могут быть ситуации - когда такая разница будет важной
- */
- ***************************************************************
- private void assertNoActiveTasks() {
- //tasks.filterBy(cssClass("active")).shouldBe(empty);
- tasks.filterBy(cssClass("displayed:true")).shouldBe(empty);
- }
- /*
- ага, вот они - твои эксперименты - про как проверять
- чтоб выбрать видимые таски - точнее tasks.filterBy(visible)
- если погрузиться в детали реализации - то при фильтрации tasks.filterBy(visible)
- мы получим список элементов, свойство isDisplayed которых = true
- */
- ******************************************************
- private void toggle(String taskText) {
- tasks.findBy(exactText(taskText)).$(".toggle").click();
- }
- private void activate(String taskText){
- toggle(taskText);
- }
- /*
- попробуй вызвать метод activate для активной таски
- разве ты выполнишь действие activate?
- почитай вот это
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.tmkuktenqqdi
- и прими окончательное решение по набору методов
- */
- ******************************************************
- private void edit(String taskText, String editText){
- /*
- реализация - ок
- названия параметров
- для обозачения было-стало часто применяют - old & new, from & to
- для обозначения текста таски мы уже применяем taskText
- в итоге - получаем
- oldTaskText & newTaskText
- fromTaskText & ToTaskText
- т е - мы останемся в тех же терминах
- */
- ***********************************************************
- private void switchFilter(String filterName){
- $$("#filters a").findBy(exactText(filterName)).click();
- }
- /*
- Для упрощения - тут можно применить $(By.linkText(...))
- про набор методов - писала выше
- */
- *****************************************
- private void assertItemsLeft(Integer quantityTasks){
- $("#todo-count").shouldHave(exactText(quantityTasks + " item left"));
- }
- /*
- не всегда в фразе будет фигурировать item left
- внутри элемента "#todo-count" - есть элемент, содержищий именно цифру счетчика
- достаточно проверить именно текст этого внутреннего элемента
- грамотно реализовала - параметр метода - это число
- что естественно - мы же количество проверяем
- */
Advertisement
Add Comment
Please, Sign In to add comment