julia_v_iluhina

Untitled

Dec 5th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.21 KB | None | 0 0
  1. /*
  2.     Поторопилась ты разнести по вспомогательным методам код
  3.  
  4.     в следующем видео будет про это - как это сделать правильно
  5.     тоже есть свои нюансы)
  6.  
  7.     понятно - хотелось простого лаконичного кода
  8.     есть у реализованного решения недостатки)
  9.     по ходу коротко это прокомментирую
  10.  
  11.     а второе видео - окончательно точки над i расставит
  12. */
  13. *************************************
  14.  
  15. public class TodoMVCTest {
  16.  
  17.     //Функция создания тасков
  18.     public void testCreateTask(int CountOfTask){
  19.     /*
  20.         это - не тест-метод
  21.         а - вспомогательный метод, реализующий добавление тасок
  22.  
  23.         имена таких вспомогательных методов - не нужно начинать с test
  24.         и раз мы в приложении работаем только с тасками - можно убрать Task с имени метода
  25.  
  26.         получим - create(...)
  27.  
  28.         про то, какие параметры лучше для метода использовать - в видео будет подробнее
  29.         смысл в том - чтоб сделать все максимально управляемо и прозрачно
  30.         чтоб вспомогательные методы могли использоваться в различных обстоятельствах и не скрывали важного
  31.  
  32.         сравни
  33.         create("task1", "task2", "task3", "task4")
  34.         create(4)
  35.  
  36.         в первом варианте - еще на уровне тест-метода - уже все явно
  37.         и не надо думать и заглядывать во вспомогательный метод - чтоб узнать с какими тестами таски будут созданы
  38.         все будет проще, однозначнее и универсальнее
  39.  
  40.         это будет на следующем видео
  41.  
  42.         имена параметров - начинаются с маленькой буквы
  43.         https://google.github.io/styleguide/javaguide.html#s5.2.6-parameter-names
  44.     */
  45.  
  46.         for (int i=1; i<=CountOfTask; i++){
  47.             $("#new-todo").setValue("Task " + i).pressEnter();
  48.             $("#todo-list").shouldHave(Condition.text("Task " + i));
  49.         }
  50.       /*
  51.         еще важный момент - не нужно смешивать внутри одного вспомогательного метода - действия и проверки
  52.         во-первых - так мы прячем тестовую логику
  53.         и, гладя на код тест-метода, будет тяжело понять - что мы делали и что проверяли
  54.         а это важно - чтоб код тестов не требовал больших усилий и времени для понимания
  55.  
  56.         второй момент - мы или не сможем реализовать максимально точные проверки
  57.         или наши проверки будут диктовать нам - как нужно использовать вспомогательный метод
  58.  
  59.         тут у тебя вариант - с неточными проверками
  60.  
  61.         допустим - при добавлении таски - добавляются несколько тасок с таким текстом
  62.         твоя проверка - не словит такой ошибки
  63.  
  64.         или - если таски добавляются с правильным текстом
  65.         но что-то происходит либо с порядком тасок
  66.         либо с другими, ранее добавленными тасками
  67.  
  68.         проверять лучше весь список тасок
  69.         и оперировать не одним элементом $("#todo-list")
  70.         а коллекцией элементов $$("#todo-list>li")
  71.         посмотри - что по такому селектору находится
  72.  
  73.         как раз - коллекция - все таски из списка тасок
  74.  
  75.         что нам и надо
  76.  
  77.         коллекцию элементов  - тоже можно проверить
  78.         наиболее точно в нашем случае - использовать кондишен exactTexts
  79.  
  80.          как осуществяется проверка по кондишену exactTexts
  81.                     сверяется количество, порядок и тексты
  82.                         количество элементов коллекции должно быть равно количеству переданных текстов
  83.                         иначе - проверка не прошла
  84.                         и далее - по порядку сверяются текст элемента и переданный текст
  85.                         нулевой - с нулевым
  86.                         первый с первым
  87.                         и  т д
  88.                     таким образом - уже не нужно проверять размер списка
  89.                     раз уже проверили  exactTexts
  90.  
  91.         сравни варианты кода
  92.             create(4);
  93.  
  94.             create("task1", "task2", "task3", "task4");
  95.             $$("#todo-list>li").shouldHave(exactTexts("task1", "task2", "task3", "task4"));
  96.  
  97.             или то же самое, но с новым методом-провекрой
  98.             create("task1", "task2", "task3", "task4");
  99.             assertTasks("task1", "task2", "task3", "task4"));
  100.         да, второй и третий варианты - чуть длиннее
  101.         но такой код в тест-методе - праклически не вызывает вопросов
  102.         да и проверки точнее )
  103.       */
  104.     }
  105. *****************************************
  106.     //функция удаления таски
  107.     /*
  108.         если имена методов - наглядные - то такиех комментов и не понадобится
  109.     */
  110.     public void testDeleteTask(int TaskNumber) {
  111.  
  112.         $("#todo-list li:nth-of-type("+TaskNumber+")").hover();
  113.         $("#todo-list li:nth-of-type("+TaskNumber+") .destroy").click();
  114.         $("#todo-list").shouldNotHave(Condition.text("Task " + TaskNumber));
  115.     }
  116.     /*
  117.         тут в принципе похожие вопросы
  118.             имя метода
  119.             набор мараметров
  120.  
  121.             не нужно проверку в методе-действии держать
  122.             и проверку нужно уточнить
  123.  
  124.         сравни
  125.              testDeleteTask(2);
  126.  
  127.              delete("task2");
  128.              assertTasks("task1", "task3", "task4"));
  129.  
  130.         второй вариант - проще в понимании и точнее
  131.         да и универсальнее
  132.  
  133.         как сделать - бует во втором видео
  134.     */
  135. ******************************************************
  136.     //функция комплита одной таски
  137.     public void testCompleteTask(int TaskNumber) {
  138.  
  139.        // $("#todo-list li:nth-of-type("+j+")").hover();
  140.         $("#todo-list li:nth-of-type("+TaskNumber+") .toggle").click();
  141.         $("#todo-list li:nth-of-type("+TaskNumber+")").shouldHave(Condition.cssClass("completed"));
  142.  
  143.     }
  144.     /*
  145.         тут - все предыдущие моменты
  146.  
  147.         плюс к этому - такой вопрос
  148.         примени метод этот к уже закомпличеной таске
  149.         мы закомплитим таску?
  150.         нет, наоборот - переоткроем
  151.  
  152.         а значит - метод с такой реализацией - вообще не стоит так называть
  153.  
  154.         про проверку после такого действия - лучше чем на втором видео  - не расскажу
  155.  
  156.         тут - плохо, что она относится только к одной таске, а не ко всему списку
  157.         ну и не нужно ее держать внутри метода-действия
  158.  
  159.         и вообще ее можно будет пропустить)
  160.         почему - смотри видео)
  161.     */
  162. ********************************************************
  163.     .....
  164. /*
  165.     редкий случай, когда кучу идей предвосхитила
  166.     но в то же время - практически все потребует доработки)
  167.    
  168.     сравни
  169.     $("#todo-list li") = элемент по такому селектору = первая таска в списке (подумай над провекрами такой сущности - насколько они ок    
  170.     и    
  171.     $$("#todo-list li") = коллекция элементов = все таски в списке
  172.    
  173.     тоже важный момент
  174. */
  175. **********************************************************
  176.     @Test
  177.     public void testMainTask() {
  178.     /*
  179.         все же testTasksLifeCycle, testTasksCommonFlow - лучше охарактеризует тестметод
  180.     */
  181.         byte n = 4;
  182.     /*
  183.         а стоило ли заводить такую переменную - мы же ее единожды используем?
  184.     */    
  185.  
  186.         open("https://todomvc4tasj.herokuapp.com");
  187.         testCreateTask(n);
  188.         testDeleteTask(2);
  189.         testCompleteTask(3);
  190.         testClearCompletedTask();
  191.         testCompleteAllTask();
  192.         testClearCompletedTask();
  193.  
  194.     }
  195.  
  196.  
  197.  
  198.  
  199. }
Advertisement
Add Comment
Please, Sign In to add comment