julia_v_iluhina

Untitled

Sep 27th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.03 KB | None | 0 0
  1.     public class TodoMVCUseCases {
  2.     /*
  3.         для тест-класса - не самое подходящее имя
  4.  
  5.         имя тест-класса - должно заканчиваться на Test
  6.  
  7.         Посмотри раздел о naming в faq
  8.  
  9.         TodoMVCTest - будет ок
  10.  
  11.         фраза UseCases - не добавляет никакой полезной информации о тест-классе
  12.     */
  13. *****************************************************
  14.     @Test
  15.     public void taskWorkFlow(){
  16.         open("https://todomvc4tasj.herokuapp.com/");
  17.  
  18.         add("task1", "task2", "task3", "task4");
  19.         confirmEdit("task1", "task11");
  20.         /*
  21.             ты знаешь, в предыдущей версии - этот кусок был лучше
  22.  
  23.             было
  24.             add("task1");
  25.             confirmEdit("task1", "task1 edited");
  26.  
  27.             я предлагала еще добавить сюда закомпличивание таски
  28.             строки 34-41 прошлого ревью
  29.  
  30.             в итоге - получили бы
  31.  
  32.             add("task1");
  33.             confirmEdit("task1", "task1 edited");
  34.             toggle("task1 edited");
  35.  
  36.             чем было лучше
  37.             было лучше - т к в списке была единственная таска
  38.             и мы могли использовать следующие действия как неявные проверки
  39.             проверка - должна проверять все таски
  40.             следовательно - только если у тебя в списке одна видимая таска - ты можешь эффективно применять
  41.             действие - в качестве проверок предыдущего действия
  42.  
  43.             в текущей версии - сразу добавлены несколько тасок
  44.             все - мы будем вынуждеы после каждого действия выполнять проверку
  45.             неявные проверку - не наш выбор в таком случае
  46.  
  47.             вернись к варианту
  48.              add("task1");
  49.              confirmEdit("task1", "task1 edited");
  50.              toggle("task1 edited");
  51.  
  52.              это и правда один из оптимальных вариантов
  53.  
  54.              и еще - вариант текста таски после редактирования - "task1 edited"
  55.              тоже лучше, чем в текущей версии
  56.              т к "task1 edited" - поясняет нам далее - что за таска и что с ней уже было
  57.         */
  58.         assertEdited("task11", "task2", "task3", "task4");
  59.         /*
  60.             про имя метода assertEdited - писала
  61.             строки 257-262 прошлого ревью
  62.  
  63.         */
  64.  
  65.         cancelEdit("task2", "task21");
  66.         assertEdited("task11", "task2", "task3", "task4");
  67.  
  68.         toggle("task4");
  69.         /*
  70.             нужна проверка текстов тасок
  71.             да, закомпличивание ты недопроверишь
  72.             это допроверится после перехода на active фильтр
  73.  
  74.             но - ты проверишь - что вне зависимости от своего статуса - на all таски отобразаются
  75.             и что вообще после закомпличивания - со всеми остальными тасками все ок
  76.         */
  77.  
  78.         clickFilterActive();
  79.         assertVisibleTasks("task11", "task2", "task3");
  80.  
  81.         /*
  82.             разумнее тут покрыть cancelEdit
  83.             чтоб разгрузить all фильтр
  84.  
  85.             писала - что лучше распределить операции по фильтрам - поравномернее
  86.             строки 119-136 прошлого ревью
  87.         */
  88.  
  89.         toggleAll();
  90.         assertNotVisibleTasks();
  91.  
  92.         add("task5");
  93.         assertVisibleTasks("task5");
  94.  
  95.         confirmEdit("task5", "task51");
  96.         /*
  97.            это - уже покрыто на all
  98.            для smoke покрытия - не нужно одну и ту же операцию покрывать на разных фильтрах
  99.  
  100.            достаточно операцию покрыть лишь единожды
  101.         */
  102.         assertVisibleTasks("task51");
  103.  
  104.         clickFilterCompleted();
  105.         assertVisibleTasks("task11", "task2", "task3", "task4");
  106.  
  107.         toggle("task11");
  108.         assertVisibleTasks("task2", "task3", "task4");
  109.  
  110.         delete("task2");
  111.         /*
  112.             советую это под финиш отложить - тем более - что там ты тоже удаление покрываешь
  113.         */
  114.         assertVisibleTasks("task3", "task4");
  115.  
  116.         clearCompleted();
  117.         assertNotVisibleTasks();
  118.         /*
  119.             вот да - хорошая идея - на completed фильтре
  120.             одну таску переоткрыть
  121.             вторую - через clearCompleted() удалить
  122.  
  123.             подсказка - для этого тебе достаточно иметь 2 таски после перехода на completed фильтр)
  124.         */
  125.  
  126.         clickFilterAll();
  127.         /*
  128.             была бы тут одна таска "task11"
  129.             я могла бы согласиться - что delete("task11") - неявно проверит состояние списка
  130.  
  131.             но - тут у нас 2 таски
  132.             значит - нужна проверка
  133.         */
  134.         delete("task11");
  135.         assertItemLeft(1);
  136.         /*
  137.             этой проверки недостаточно
  138.             нужна проверка состояния списка тасок
  139.         */
  140.     }
  141. ******************************************
  142. /*
  143.     оцениваем покрытие
  144.     All
  145.             add *4 (предлагаю добавить лишь одну - так сможешь использовать неявные проверки)
  146.             confirmEdit
  147.             cancelEdit (предлагаю перенести на Active - для равномерного распределения операций по фильтрам)
  148.             complete
  149.  
  150.     Active
  151.             complete all
  152.             add (предлагаю сдвинуть на шаг выше - раз мы не создавали лишнего на all)
  153.             confirmEdit (это лишнее - на all уже покрыли, убирай)
  154.  
  155.     Completed
  156.             activate
  157.             delete (это ниже на all покроем, убирай)
  158.             clearCompleted
  159.  
  160.     All
  161.             delete
  162.  
  163.     с выше обозначенными корректировками - будет ок
  164.  
  165. */
  166. ***************************************************
  167.  
  168.     private void assertTasksAre(String... taskTexts){
  169.         tasks.shouldHave(exactTexts(taskTexts));
  170.     }
  171.  
  172.     private void assertTasksAreNot(){
  173.         tasks.filter(visible).shouldBe(empty);
  174.     }
  175.    
  176.     private void assertEmpty(){
  177.         tasks.shouldBe(empty);
  178.     }
  179.  
  180.     private void assertVisibleTasks(String... taskTexts){
  181.         tasks.filter(visible).shouldHave(exactTexts(taskTexts));
  182.     }
  183.  
  184.     private void assertNotVisibleTasks(String... taskTexts){
  185.         tasks.filter(visible).shouldBe(empty);
  186.     }
  187. /*
  188.     ты решила быть точной - и реализовала 6 методов для проверки состояния списка тасок
  189.  
  190.     зачем 2 метода с одинаковой функциональностью -
  191.     и в assertTasksAreNot и в  assertNotVisibleTasks - есть фильтрация по visible?
  192.     достаточно одного
  193.  
  194.     почему названия методов - не подчинены одной логике построения фраз?
  195.  
  196.         проверяем Tasks or VisibleTasks
  197.    
  198.         если assertTasksAre
  199.         то assertVisibleTasksAre
  200.    
  201.         если assertTasks
  202.         то assertVisibleTasks
  203.    
  204.         нет тасок = there are no tasks = assertNoTasks or assertNoVisibleTasks
  205.    
  206.         или - список тасок пуст = tasks are empty = assertTasksAreEmpty or assertVisibleTasksAreEmpty
  207.         мне такой вариант меньше нравится - недостаточно однозначно понимаемый
  208.  
  209.     в любом случае - фразы строим по одинаковым правилам
  210.     иначе - имена методов будет сложно быстро запомнить или понять
  211.     это важно
  212.  
  213. */
  214. **************************************
  215.     private void assertEdited(String... taskText){
  216.         assertTasksAre(taskText);
  217.     }
  218. /*
  219.     поищи в прошлом ревью
  220.     писала про этот метод
  221.  
  222.     он не нужен
  223.  
  224.     если не согласна  - в слеке давай обсудим
  225. */
  226. ***************************************
  227.  
  228.     private void clickFilterAll(){
  229.     private void clickFilterActive(){
  230.     private void clickFilterCompleted(){
  231.  /*
  232.     строки 269-276 прошлого ревью
  233.  
  234.     не нужно лишних слов в именах
  235.  
  236.     если есть более лаконичный и настолько же точный вариант - то лучше предпочесть его
  237.  
  238.     если не согласна  - в слеке давай обсудим
  239.  */
  240.  ***********************************************
  241.     private void assertItemLeft(int itemCount){
  242.   /*
  243.     строки 281-285 прошлого ревью
  244.   */
Advertisement
Add Comment
Please, Sign In to add comment