julia_v_iluhina

Untitled

Feb 13th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.22 KB | None | 0 0
  1. public class TodoMVCTest {
  2.  
  3.     @Test
  4.     public void assertCreateTask(){
  5.     /*
  6.         в этом тест-методе - мы не только создание таски проверяем
  7.         мы проверяем несколько действий
  8.  
  9.         и еще - не стоит начинать имя тест-метода с assert
  10.  
  11.         в faq - есть несколько полезных советов
  12.         вообще посмотри на раздел по неймингу
  13.         и обрати внимание на эти моменты
  14.             https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.txqig9rkgybo
  15.             https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#bookmark=id.o9xlweio5gup
  16.     */
  17.         open("https://todomvc4tasj.herokuapp.com/");
  18.  
  19.         $$("#todo-list li").shouldBe(empty);
  20.         /*
  21.             хм...
  22.             я бы не стала делать проверки после открытия урла
  23.  
  24.             какая цель была у проверки? поясни
  25.  
  26.             на самом деле, бывает необходимость в тестах - проверить что-то перед первым тестируемым действием
  27.                Если предварительные действия медленные, сложные или не надежные
  28.                То проверка в конце предварительных действий нужна
  29.  
  30.                А если мы уверены - что после предварительных действий гарантировано все ОК,
  31.                то и проверок не надо после предварительных действий
  32.  
  33.                Поскольку наше приложение - простое
  34.                Разумно не делать проверку в конце предварительных действий
  35.                чтобы наши тесты были эффективнее
  36.  
  37.                Тестировали бы что-то типа соцсети и если бы предварительные действия были
  38.                реализованы через UI - да, после предварительных действий было бы разумно
  39.                выполнить проверку (проверка после предварительных действий нам позволяет отличить -
  40.                ошибка возникла на этапе выполнения тестируемого действия, или все же раньше)
  41.         */
  42.             for(int i=0;i!=4;i++) {
  43.                 $("#new-todo").setValue("task"+(i+1)).pressEnter();
  44.             }
  45.         /*
  46.                 циклы, или if-ы = это усложнение логики
  47.                 в рамках кода тест-методов - это зло)
  48.  
  49.                 при необходимости (!!!), во вспомогательных методах (!!! а не тест-методах),
  50.                 циклы, if-ы, и прочее логически продвинутое - может применяться
  51.                 но сами тест-методы - должны оставаться простыми и понятными с первого взгляда на них
  52.                 что значит - никаких циклов, или if-ов и тому подобного
  53.  
  54.                 погугли про KISS principle
  55.  
  56.                 пока - не надо реализовывать вспомогательных методов
  57.                 это сделаешь позже, после просмотра второго видео
  58.                 его выдадим после того, как закончим работу с этой версией задания
  59.  
  60.                 сравни
  61.                 for(int i=0;i!=4;i++) {
  62.                     $("#new-todo").setValue("task"+(i+1)).pressEnter();
  63.                 }
  64.  
  65.                 и
  66.                 $("#new-todo").setValue("task1").pressEnter();
  67.                 $("#new-todo").setValue("task2").pressEnter();
  68.                 $("#new-todo").setValue("task3").pressEnter();
  69.                 $("#new-todo").setValue("task4").pressEnter();
  70.  
  71.                 во втором варианте - на одну строку больше, но код - значительно проще
  72.                 пока - используй именно такой, простой вариант
  73.                 как реализовать просто и в то же время более DRY(тоже гугли такой термин) - будет дальше
  74.  
  75.                 и уже просто по пути
  76.                 сравни
  77.                 for(int i=0;i!=4;i++)
  78.                 и
  79.                 for(int i=0;i<4;i++)
  80.                 второй вариант - более традиционный
  81.                 да и точнее отражает суть - мы ведь именно так ограничиваем количество итераций по сути
  82.         */
  83.         $$("#todo-list li").shouldHave(size(4));
  84.             for(int i=0;i!=4;i++) {
  85.                 $$("#todo-list li").get(i).shouldHave(exactText("task"+(i+1)));
  86.             }
  87.         /*
  88.             можно значительно проще
  89.            
  90.             нам достаточно проверки shouldHave(exactTexts("task1", "task2", "task3", "task4"))
  91.             как осуществяется проверка по кондишену exactTexts
  92.             сверяется количество, порядок и тексты
  93.                 количество элементов коллекции должно быть равно количеству переданных текстов
  94.                 иначе - проверка не прошла
  95.                 и далее - по порядку сверяются текст элемента и переданный текст
  96.                 нулевой - с нулевым
  97.                 первый с первым
  98.                 и  т д
  99.             таким образом - уже не нужно проверять размер списка и каждый конкретный элемент
  100.             раз уже проверили  exactTexts
  101.         */
  102.  
  103.         $$("#todo-list li").get(1).shouldHave(exactText("task2"));
  104.         /*
  105.             фактически - еще раз проверяешь только что проверенное
  106.             зачем?
  107.            
  108.             да, проверками жертвовать в тестах нельзя
  109.             но и лишних проверок - не нужно делать
  110.             єто ведь тоже снижает єффективность теста - он начинает работать медленнее,
  111.             причем никаких плюсов от этого замедления мы не получим
  112.         */
  113.         $("#todo-list li:nth-of-type(2)").hover().$(".destroy").click() ;
  114.         /*
  115.             да, можно и так
  116.            
  117.             вот такое замечание
  118.             будь последовательным в своем коде
  119.             для получения такого-то элемента в коллекции тасок - ты используешь 2 варианта
  120.             $$("#todo-list li").get(...)
  121.             и
  122.             $("#todo-list li:nth-of-type(...)")
  123.             оба - правильные
  124.             но  - делать то так, то по-другому - смысла нет
  125.             это тоже усложняет восприятие кода
  126.            
  127.             для этой версии - любой вариант из этих 2-ух - подойдет
  128.             а далее - рассмотрим как сделать лучше/точнее
  129.         */
  130.         $$("#todo-list li").shouldHave(size(3));
  131.         /*
  132.             проверка размера - недостаточная проверка
  133.             количество тасок может оказаться верным
  134.             но порядок может измениться, или тексты тасок, или удалится не та таска
  135.            
  136.             в общем - и здесь уместна точная проверка exactTexts
  137.             она точно проверит состояние всех тасок в списке
  138.            
  139.             это касается и других проверок после тестируемых действий
  140.         */
  141.  
  142.         $$("#todo-list li").get(2).shouldHave(exactText("task4"));
  143.         /*
  144.             и вот такая проверка - сразу станет излишней
  145.             т к на предыдущем шаге - тексты всех тасок - будут проверены
  146.         */
Advertisement
Add Comment
Please, Sign In to add comment