Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TodoMVCTest {
- @Test
- public void assertCreateTask(){
- /*
- в этом тест-методе - мы не только создание таски проверяем
- мы проверяем несколько действий
- и еще - не стоит начинать имя тест-метода с assert
- в faq - есть несколько полезных советов
- вообще посмотри на раздел по неймингу
- и обрати внимание на эти моменты
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
- https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.o9xlweio5gup
- */
- open("https://todomvc4tasj.herokuapp.com/");
- $$("#todo-list li").shouldBe(empty);
- /*
- хм...
- я бы не стала делать проверки после открытия урла
- какая цель была у проверки? поясни
- на самом деле, бывает необходимость в тестах - проверить что-то перед первым тестируемым действием
- Если предварительные действия медленные, сложные или не надежные
- То проверка в конце предварительных действий нужна
- А если мы уверены - что после предварительных действий гарантировано все ОК,
- то и проверок не надо после предварительных действий
- Поскольку наше приложение - простое
- Разумно не делать проверку в конце предварительных действий
- чтобы наши тесты были эффективнее
- Тестировали бы что-то типа соцсети и если бы предварительные действия были
- реализованы через UI - да, после предварительных действий было бы разумно
- выполнить проверку (проверка после предварительных действий нам позволяет отличить -
- ошибка возникла на этапе выполнения тестируемого действия, или все же раньше)
- */
- for(int i=0;i!=4;i++) {
- $("#new-todo").setValue("task"+(i+1)).pressEnter();
- }
- /*
- циклы, или if-ы = это усложнение логики
- в рамках кода тест-методов - это зло)
- при необходимости (!!!), во вспомогательных методах (!!! а не тест-методах),
- циклы, if-ы, и прочее логически продвинутое - может применяться
- но сами тест-методы - должны оставаться простыми и понятными с первого взгляда на них
- что значит - никаких циклов, или if-ов и тому подобного
- погугли про KISS principle
- пока - не надо реализовывать вспомогательных методов
- это сделаешь позже, после просмотра второго видео
- его выдадим после того, как закончим работу с этой версией задания
- сравни
- for(int i=0;i!=4;i++) {
- $("#new-todo").setValue("task"+(i+1)).pressEnter();
- }
- и
- $("#new-todo").setValue("task1").pressEnter();
- $("#new-todo").setValue("task2").pressEnter();
- $("#new-todo").setValue("task3").pressEnter();
- $("#new-todo").setValue("task4").pressEnter();
- во втором варианте - на одну строку больше, но код - значительно проще
- пока - используй именно такой, простой вариант
- как реализовать просто и в то же время более DRY(тоже гугли такой термин) - будет дальше
- и уже просто по пути
- сравни
- for(int i=0;i!=4;i++)
- и
- for(int i=0;i<4;i++)
- второй вариант - более традиционный
- да и точнее отражает суть - мы ведь именно так ограничиваем количество итераций по сути
- */
- $$("#todo-list li").shouldHave(size(4));
- for(int i=0;i!=4;i++) {
- $$("#todo-list li").get(i).shouldHave(exactText("task"+(i+1)));
- }
- /*
- можно значительно проще
- нам достаточно проверки shouldHave(exactTexts("task1", "task2", "task3", "task4"))
- как осуществяется проверка по кондишену exactTexts
- сверяется количество, порядок и тексты
- количество элементов коллекции должно быть равно количеству переданных текстов
- иначе - проверка не прошла
- и далее - по порядку сверяются текст элемента и переданный текст
- нулевой - с нулевым
- первый с первым
- и т д
- таким образом - уже не нужно проверять размер списка и каждый конкретный элемент
- раз уже проверили exactTexts
- */
- $$("#todo-list li").get(1).shouldHave(exactText("task2"));
- /*
- фактически - еще раз проверяешь только что проверенное
- зачем?
- да, проверками жертвовать в тестах нельзя
- но и лишних проверок - не нужно делать
- єто ведь тоже снижает єффективность теста - он начинает работать медленнее,
- причем никаких плюсов от этого замедления мы не получим
- */
- $("#todo-list li:nth-of-type(2)").hover().$(".destroy").click() ;
- /*
- да, можно и так
- вот такое замечание
- будь последовательным в своем коде
- для получения такого-то элемента в коллекции тасок - ты используешь 2 варианта
- $$("#todo-list li").get(...)
- и
- $("#todo-list li:nth-of-type(...)")
- оба - правильные
- но - делать то так, то по-другому - смысла нет
- это тоже усложняет восприятие кода
- для этой версии - любой вариант из этих 2-ух - подойдет
- а далее - рассмотрим как сделать лучше/точнее
- */
- $$("#todo-list li").shouldHave(size(3));
- /*
- проверка размера - недостаточная проверка
- количество тасок может оказаться верным
- но порядок может измениться, или тексты тасок, или удалится не та таска
- в общем - и здесь уместна точная проверка exactTexts
- она точно проверит состояние всех тасок в списке
- это касается и других проверок после тестируемых действий
- */
- $$("#todo-list li").get(2).shouldHave(exactText("task4"));
- /*
- и вот такая проверка - сразу станет излишней
- т к на предыдущем шаге - тексты всех тасок - будут проверены
- */
Advertisement
Add Comment
Please, Sign In to add comment