julia_v_iluhina

Untitled

Nov 6th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.45 KB | None | 0 0
  1. public class SmokeTest {
  2. /*
  3.     Имя тест-класса - должно отражать, что мы тестим
  4.     То, что реализуем Smoke покрытие - это важная информация
  5.     но - это не о тест-классе и не о тест-методе
  6.     это о покрытии
  7.     и оно может быть реализовано несколькими тест-методами разных тест-классов
  8.  
  9.     как показывать, что реализуем Smoke - это будет дальше на курсе
  10.  
  11.     сейчас - Smoke - убираем и из имени тест-класса и из имени тест-метода
  12.  
  13.     названия тест-класса и тест-метода - как в прошлой работе
  14.     и тут подойдет
  15.  
  16.     а чтобы этот тест-класс мог соседствовать в проекте с тест-классом - предыдущим заданием
  17.     используй разные пекеджи
  18.     в java - возможно в одном проекте держать классі с одинаковыми именами, но в разных пекеджах
  19. */
  20.     @Test
  21.     public void tasksSmokeTest() {
  22.     /*
  23.         нейминг
  24.         учти комментарий выше
  25.     */
  26.  
  27.         open("https://todomvc4tasj.herokuapp.com/");
  28.  
  29.         add("task1");
  30.         edit("task1", "task2");
  31.         /*
  32.             разумнее вот так реализовать
  33.             edit("task1", "task1 edited");
  34.  
  35.             это даст дальше понимание - что за таска была изначально и что мы с ней делали
  36.         */
  37.         assertTasksAre("task2");
  38.  
  39.         filterActive();
  40.         /*
  41.             было до перехода на нужный фильтр - в списке тасок таски с текстами = task2
  42.             перешли на другой фильтр
  43.             стало = то же самое - task2
  44.  
  45.             да, все верно, что на Active фильтре - и должна отображаться активная таска task2
  46.             так могло быть - если переход на фильтр правильно отработал
  47.             и точно также могло быть - если бы переход на фильтр вообще не отработал
  48.             ведь было=стало=ничего не изменилось
  49.  
  50.             чтоб переход на фильтр хорошо протестировать - нужно, чтобы "было" отличалось от "стало"
  51.  
  52.             а для этого - закомплить таску перед переходом на Active фильтр
  53.             проверь тексты тасок
  54.             и после перехода на Active фильтр
  55.             убедись - что в списке тасок нет видимых тасок
  56.             т е - "было" будет отличаться от "стало"
  57.  
  58.             и мы максимально точно проверим фильтеринг
  59.             это же учти - когда будешь и другие переходы по фильтрам покрывать
  60.         */
  61.         cancelEdit("task2", "task3");
  62.         /*
  63.             тут можно лучше
  64.             cancelEdit("task2", "task2 edit calceled");
  65.  
  66.             тестовые данные будут пояснять - что мы делаем
  67.  
  68.             следующая операция add("task4") = не проверяет cancelEdit("task2"...
  69.             значит - нужна проверка
  70.         */
  71.         add("task4");
  72.         assertTasksAre("task2", "task4");
  73.         toggle("task2");
  74.         /*
  75.             нет проверки
  76.             filterCompleted(); - не проверяет операцию toggle("task2");
  77.  
  78.             еще раз перечитай то, что я в слеке тебе скинула
  79.             про неявные проверки
  80.         */
  81.  
  82.         filterCompleted();
  83.         /*
  84.             нет проверки
  85.             почему?
  86.         */
  87.         clearCompleted();
  88.         /*
  89.             нет проверки
  90.             почему?
  91.  
  92.             твои пояснения - нет, этого недостаточно
  93.  
  94.             проверка assertTasksAre("task2", "task4"); была гораздо выше по коду
  95.             да и вообще - какая нам разница - что мы раньше проверяли
  96.             мы смотрим на то - что делаем сразу после этого
  97.  
  98.             если следующая операция не проверяет предыдущую
  99.             значит - нужна проверка
  100.  
  101.             представь - тест падает на последней операции - assertNoTasks();
  102.             попробуй быстро понять - что конкретно отработало не так
  103.             будут длительные разборки
  104.         */
  105.  
  106. ...
  107. ****************************
  108. анализируем покрытие
  109.  
  110. public class SmokeTest {
  111.  
  112. all
  113.         add
  114.         edit
  115.         delete
  116.  
  117. active
  118.         cancel edit
  119.         add
  120.         complete
  121.  
  122. Completed
  123.         clearCompleted
  124.  
  125. что еще не покрыто из высокоприоритетного
  126.     complete all
  127.     reopen
  128.  
  129. еще я советовала покрыть единожды
  130.     items left
  131.     посмотри еще один кусочек - про приоритеты - в слеке
  132.  
  133. грамотно - что на все 3 фильтра зашел
  134. грамотно - что удаления отложил на конец сценария
  135.  
  136. но - с проверками есть проблемы
  137. их не хватает, а некоторые из них - неточные
  138. выше это описала
  139.  
  140. когда будешь complete all и reopen встраивать в свой сценарий
  141. постарайся их распределить поравномернее - по фильтрам
  142. идеально равномерно не получится, конечно
  143. но это учти
  144. *****************************
  145.  ElementsCollection tasks = $$("#todo-list li");
  146. /*
  147.     есть вариант более точного селектора
  148.     "#todo-list>li"
  149.  
  150.     тут и твой вариант рабочий
  151.  
  152.     но иногда эта разница может быть критично важной
  153.  
  154.     почитай про эту разницу - пробел  или > в селекторе
  155. */
  156. *******************************
  157.     private void filterActive() {
  158.         $("#filters li:nth-child(2)").click();
  159.     }
  160.  
  161.     private void filterCompleted() {
  162.         $("#filters li:nth-child(3)").click();
  163.     }
  164.  
  165.     private void filterAll() {
  166.         $("#filters li:nth-child(1)").click();
  167.     }
  168. /*
  169.     хорошее решение - что реализовал отдельный метод для перехода на каждый из фильтров
  170.     почему это хорошее решение - почитай
  171.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
  172.    
  173.     и вообще - в faq почитай про KISS и DRY принципы
  174.    
  175.     по реализации
  176.     в нашем приложении - элементов a = ccылок = немного
  177.     потому можно реализовать получение  элементов в этих методах проще и нагляднее -
  178.     $(By.linkText(....))
  179. */
  180. /*
  181.     Также советую упорядочивать методы
  182.     конечно, технически, порядок методов может быть любым
  183.    
  184.     но мы же хотим получить легко воспринимаемый код
  185.     потому - лучше, чтобы методы шли в неком логическом порядке
  186.      
  187.     рядом - аналогичные друг другу методы
  188.     сначала - базовые операции, потом - остальное
  189. */
Advertisement
Add Comment
Please, Sign In to add comment