Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Поторопилась ты разнести по вспомогательным методам код
- в следующем видео будет про это - как это сделать правильно
- тоже есть свои нюансы)
- понятно - хотелось простого лаконичного кода
- есть у реализованного решения недостатки)
- по ходу коротко это прокомментирую
- а второе видео - окончательно точки над i расставит
- */
- *************************************
- public class TodoMVCTest {
- //Функция создания тасков
- public void testCreateTask(int CountOfTask){
- /*
- это - не тест-метод
- а - вспомогательный метод, реализующий добавление тасок
- имена таких вспомогательных методов - не нужно начинать с test
- и раз мы в приложении работаем только с тасками - можно убрать Task с имени метода
- получим - create(...)
- про то, какие параметры лучше для метода использовать - в видео будет подробнее
- смысл в том - чтоб сделать все максимально управляемо и прозрачно
- чтоб вспомогательные методы могли использоваться в различных обстоятельствах и не скрывали важного
- сравни
- create("task1", "task2", "task3", "task4")
- create(4)
- в первом варианте - еще на уровне тест-метода - уже все явно
- и не надо думать и заглядывать во вспомогательный метод - чтоб узнать с какими тестами таски будут созданы
- все будет проще, однозначнее и универсальнее
- это будет на следующем видео
- имена параметров - начинаются с маленькой буквы
- https://google.github.io/styleguide/javaguide.html#s5.2.6-parameter-names
- */
- for (int i=1; i<=CountOfTask; i++){
- $("#new-todo").setValue("Task " + i).pressEnter();
- $("#todo-list").shouldHave(Condition.text("Task " + i));
- }
- /*
- еще важный момент - не нужно смешивать внутри одного вспомогательного метода - действия и проверки
- во-первых - так мы прячем тестовую логику
- и, гладя на код тест-метода, будет тяжело понять - что мы делали и что проверяли
- а это важно - чтоб код тестов не требовал больших усилий и времени для понимания
- второй момент - мы или не сможем реализовать максимально точные проверки
- или наши проверки будут диктовать нам - как нужно использовать вспомогательный метод
- тут у тебя вариант - с неточными проверками
- допустим - при добавлении таски - добавляются несколько тасок с таким текстом
- твоя проверка - не словит такой ошибки
- или - если таски добавляются с правильным текстом
- но что-то происходит либо с порядком тасок
- либо с другими, ранее добавленными тасками
- проверять лучше весь список тасок
- и оперировать не одним элементом $("#todo-list")
- а коллекцией элементов $$("#todo-list>li")
- посмотри - что по такому селектору находится
- как раз - коллекция - все таски из списка тасок
- что нам и надо
- коллекцию элементов - тоже можно проверить
- наиболее точно в нашем случае - использовать кондишен exactTexts
- как осуществяется проверка по кондишену exactTexts
- сверяется количество, порядок и тексты
- количество элементов коллекции должно быть равно количеству переданных текстов
- иначе - проверка не прошла
- и далее - по порядку сверяются текст элемента и переданный текст
- нулевой - с нулевым
- первый с первым
- и т д
- таким образом - уже не нужно проверять размер списка
- раз уже проверили exactTexts
- сравни варианты кода
- create(4);
- create("task1", "task2", "task3", "task4");
- $$("#todo-list>li").shouldHave(exactTexts("task1", "task2", "task3", "task4"));
- или то же самое, но с новым методом-провекрой
- create("task1", "task2", "task3", "task4");
- assertTasks("task1", "task2", "task3", "task4"));
- да, второй и третий варианты - чуть длиннее
- но такой код в тест-методе - праклически не вызывает вопросов
- да и проверки точнее )
- */
- }
- *****************************************
- //функция удаления таски
- /*
- если имена методов - наглядные - то такиех комментов и не понадобится
- */
- public void testDeleteTask(int TaskNumber) {
- $("#todo-list li:nth-of-type("+TaskNumber+")").hover();
- $("#todo-list li:nth-of-type("+TaskNumber+") .destroy").click();
- $("#todo-list").shouldNotHave(Condition.text("Task " + TaskNumber));
- }
- /*
- тут в принципе похожие вопросы
- имя метода
- набор мараметров
- не нужно проверку в методе-действии держать
- и проверку нужно уточнить
- сравни
- testDeleteTask(2);
- delete("task2");
- assertTasks("task1", "task3", "task4"));
- второй вариант - проще в понимании и точнее
- да и универсальнее
- как сделать - бует во втором видео
- */
- ******************************************************
- //функция комплита одной таски
- public void testCompleteTask(int TaskNumber) {
- // $("#todo-list li:nth-of-type("+j+")").hover();
- $("#todo-list li:nth-of-type("+TaskNumber+") .toggle").click();
- $("#todo-list li:nth-of-type("+TaskNumber+")").shouldHave(Condition.cssClass("completed"));
- }
- /*
- тут - все предыдущие моменты
- плюс к этому - такой вопрос
- примени метод этот к уже закомпличеной таске
- мы закомплитим таску?
- нет, наоборот - переоткроем
- а значит - метод с такой реализацией - вообще не стоит так называть
- про проверку после такого действия - лучше чем на втором видео - не расскажу
- тут - плохо, что она относится только к одной таске, а не ко всему списку
- ну и не нужно ее держать внутри метода-действия
- и вообще ее можно будет пропустить)
- почему - смотри видео)
- */
- ********************************************************
- .....
- /*
- редкий случай, когда кучу идей предвосхитила
- но в то же время - практически все потребует доработки)
- сравни
- $("#todo-list li") = элемент по такому селектору = первая таска в списке (подумай над провекрами такой сущности - насколько они ок
- и
- $$("#todo-list li") = коллекция элементов = все таски в списке
- тоже важный момент
- */
- **********************************************************
- @Test
- public void testMainTask() {
- /*
- все же testTasksLifeCycle, testTasksCommonFlow - лучше охарактеризует тестметод
- */
- byte n = 4;
- /*
- а стоило ли заводить такую переменную - мы же ее единожды используем?
- */
- open("https://todomvc4tasj.herokuapp.com");
- testCreateTask(n);
- testDeleteTask(2);
- testCompleteTask(3);
- testClearCompletedTask();
- testCompleteAllTask();
- testClearCompletedTask();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment