julia_v_iluhina

Untitled

Nov 10th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.80 KB | None | 0 0
  1.  @Test
  2.     public void testTasksLifeCycle() {
  3.  
  4.         open("https://todomvc4tasj.herokuapp.com/");
  5.  
  6.         add("task1");
  7.         edit("task1", "task1 edited");
  8.         assertTasksAre("task1 edited");
  9.         toggle("task1 edited");
  10.         /*
  11.             после edit - не нужна проверка
  12.             т к toggle("task1 edited"); - проверит состояние единственной таски
  13.  
  14.             а вот после toggle("task1 edited");
  15.             нужно проверить состояние списка тасок
  16.             проверки assertTasksAre("task1 edited"); - будет достаточно
  17.             это проверит часть логики - что таски не зависимо от статуса - будут отображаться в списке
  18.             а фильтре all
  19.  
  20.             а после перехода на Active - проверка списка тасок
  21.             допроверит закомпличивание и точно проверит переход на Active
  22.         */
  23.  
  24.         filterActive();
  25.         /*
  26.             следующая операция - не проверяет переход на Active
  27.             нужна проверка
  28.         */
  29.         toggleAll();
  30.         /*
  31.             это - действие reopen all
  32.             мы уже обсуждали
  33.             что у reopen all - приоритет не высокий
  34.             и reopen all - в рамках smoke - мы не будем вообще
  35.  
  36.             после перехода на Active() -
  37.             в списке не будет ни одной видимой таски
  38.             вот добавь таску и с ней работай
  39.         */
  40.         cancelEdit("task1 edited", "task1 edited canceled");
  41.         /*
  42.             следующая операция не проверяет предыдущую
  43.             значит что нужно сделать?
  44.         */
  45.         add("task2");
  46.         assertTasksAreVisible("task1 edited", "task2");
  47.         toggle("task1 edited");
  48.         /*
  49.             complete - уже покрыто  - на All
  50.             если там покрыл complete
  51.             то тут покрой - complete all
  52.  
  53.             этот разговор уже тоже был)
  54.         */
  55.         assertItemsLeft("1");
  56.         /*
  57.             этой проверки недостаточно
  58.             нужна проверка списка тасок
  59.         */
  60.  
  61.         filterCompleted();
  62.         /*
  63.             нет проверки
  64.         */
  65.         clearCompleted();
  66.         /*
  67.             нет проверки
  68.         */
  69.         toggleAll();
  70.         /*
  71.             покрывать в рамках smoke - complete all on completed filter
  72.             не верно
  73.  
  74.             вспомни свою же работу http://pastebin.com/yaXRt94S
  75.             вопрос - почему мы не включили  complete all on completed filter - в основные юз кейсы?
  76.  
  77.             все дело в приоритетах этого действия на этом фильтре
  78.             ведь complete all on completed filter - будет гораздо реже востребован, чем на других фильтрах
  79.         */
  80.         assertTasksAreVisible("task2");
  81.  
  82.         filterAll();
  83.         delete("task2");
  84.         /*
  85.             проверка перехода на all фильтр - получилась не удачной
  86.             т к состояние списка - не изменилось
  87.             тоже смотри прошлые ревью
  88.             было про то - как поточнее проверять переход на другой фильтр
  89.         */
  90.         assertNoTasks();
  91.     }
  92. **********************************************
  93. /*
  94.     надеялась уже этого не делать,
  95.     рассчитывала - что сам такую работу проведешь над своим кодом
  96.     анализируем покрытие
  97. */
  98.     All
  99.         add
  100.         edit
  101.         complete
  102.         delete
  103.  
  104.     Active
  105.         reopen all
  106.         cancelEdit
  107.         add
  108.         complete
  109.  
  110.     Completed
  111.         clearCompleted();
  112.         complete all
  113.  /*
  114.         complete - покрыт дважды, что лишнее
  115.         complete all - покрыт на Completed фильтре, там у этого действия невысокий приоритет
  116.         (разумнее вместо второго complete - выполнить это на Active, например)
  117.         reopen all - у этого действия невысокий приоритет, вообще не стоит его покрывать
  118.         reopen - не покрыто, разумнее всего это сделать на Completed фильтре - будут наиболее точные проверки
  119.  */
  120. ***********************************
  121. /*
  122.     про порядок методов - не прислушиваешься
  123.     объясни мне это в слеке - почему?
  124. */
  125. *****************************************
  126.     private void assertTasksAre(String... taskTexts) {
  127.     private void assertTasksAreVisible(String... taskTexts) {
  128.     private void assertNoTasks() {
  129. /*
  130.     измени имя метода assertTasksAreVisible на assertVisibleTasksAre
  131.     ведь в нем мы не проверяем - что таски видимые, а проверяем - что видимые таски = такие-то
  132.  
  133.     смотри видео
  134.     https://drive.google.com/file/d/0B8hgIBw8-V-AdGxxU1R3enl1RzQ/view?usp=sharing
  135.  
  136.     сразу к нему пояснения
  137.     мы можем быть максимально точными и держать 4 проверки
  138.         2 -
  139.             в списке = такси с такими-то текстами
  140.             в списке = пусто
  141.         и еще 2 -
  142.             в отфильтрованном по visible списке = таски с такими-то текстами
  143.             в отфильтрованном по visible списке = пусто
  144.         И за точность будем платить  тем - что надо думать - когда какую проверку вызвать правильнее
  145.         и если это делать бездумно - то при небольших изменениях сценариев - могут тесты падать на проверках,
  146.         или второй вариант - не будем нормально пользоваться полученной точностью...
  147.  
  148.         мы можем исходить из того, что ошибку, когда невидимые таски копятся в списке - мы тестим на более низком уровне,
  149.         и на UI уровне - нам не нужно до этого уточняться. Поэтому - мы будем держать всего 2 проверки
  150.               в отфильтрованном по visible списке = таски с такими-то текстами
  151.               в отфильтрованном по visible списке = пусто
  152.         В таком случае - каждый раз понятно - какую проверку вызывать - получаем более KISS картину
  153.         правда, платим за это точностью) Но - возможно - если мы уже отдельно это в тестах покрыли -
  154.         что у нас не копятся невидимые таски - так мы и не платим ) И - тогда - все проще в написании тестов,
  155.         и в их сопровождении.
  156.         Тогда - поскольку обе проверки реализованы одинаково и других нету - можно из имен проверок скрыть этот нюанс
  157.         и назвать их assertTasks и assertNoTasks (хотя в них работаем с отфильтрованным по visible списком тасок)
  158.  
  159.     вариант с 3 проверками - хуже
  160.         чем 2 проверки, или 4 проверки
  161.  
  162.         буквально пару дней назад была на эту тему дискуссия с другим студентом
  163.         приведу ее и тебе
  164.  
  165.             ...
  166.             я сделал 3 метода - 2 для проверки наличия и отсутствия видимых задач
  167.             и один для проверки, что задач вообще нету - чтоб в самом конце использовать
  168.             и подумал - что таким способом убиваю двух зайцев
  169.             только на один метод увеличиваю количестко методов
  170.             и контролирую в конце - чтоб невидимых задач не оставалось
  171.    
  172.             Согласна, вроде бы резоны твои  разумные
  173.             И точность гарантируем, и лишнего не реализуем
  174.             Но тогда в именах методов - надо четко указывать - где работаем с visible тасками, а где без такого отбора
  175.             Ну и недостаток тоже у такой схемы есть
  176.             Это хорошо - код оптимизирован
  177.             Но - людям, что не в теме - вариант с тремя методами покажется менее понятным скорей всего
  178.             (по сравнению с 2 и 4 )
  179.             И второе - а где гарантия - что сценарий какой-то другой закончится именно пустым списком тасок
  180.             Следовательно - для общего случая - если мы намерены быть точными - таки надо держать 4 метода
  181.             А вообще - что список тасок не нарастает - разумнее проверять на более низком уровне тестирования
  182.             А тут - оставить 2 проверки (с фильтрацией по видимости)
  183.             Такими инструментами будет гораздо проще пользоваться
  184.             Ну ты это чуть дальше - оценишь)
  185. */
  186.  
  187.     private void assertItemsLeft(String itemsLeft){$("#todo-count>strong").shouldHave(exactText(itemsLeft));}
  188. /*
  189.     не забывай про реформатирование кода
  190.     выдели код + в меню IntelIJ Idea - code->reformat code
  191.    
  192.     имя параметра itemsLeft - просто повторяет кусок имени метода
  193.     ничем не дополняет и не поясняет
  194.     полезнее было бы имя count, activeTasksCount - что-то такое
  195.     также - измени тип параметра
  196.     это - не строка по сути
  197.     а именно - число активных тасок
  198.     потому - параметр объяви как число
  199.    
  200.     реализация проверки верная
  201.     просто будешь число преобразовывать в строку и передавать как параметр в exactText
  202. */
Advertisement
Add Comment
Please, Sign In to add comment