julia_v_iluhina

Untitled

Nov 30th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.09 KB | None | 0 0
  1. public class FirstTest {
  2.  
  3.     @Test
  4.     public void testSomething(){
  5. /*
  6.     для имен тест-классов и тест-методов - существуют свои правила и conventions
  7.  
  8.     conventions - выдержаны)
  9.  
  10.     но есть еще и правила
  11.  
  12.     имя тест-класса - должно в общем описывать  - что же мы тестируем
  13.     TodoMvcTest - будет OK
  14.  
  15.     имя тест-метода - должно еще более уточнять это
  16.     и повторяться с именем тест-класса - уже не нужно
  17.     Если бы тестировали одно-два действия - можно было бы перечислить это в имени тест-метода
  18.     А так - лучше использовать фразы типа LifeCycle, CommonFlow ...
  19.     testTasksLifeCycle - как вариант
  20.  
  21.     в faq - есть большой раздел по неймингу
  22.     https://docs.google.com/document/d/10qSwWTQ6pGfVZSwOes-1QSmdflMiGD2U_y53VHq2m20/edit#
  23. */
  24.         open("https://todomvc4tasj.herokuapp.com");
  25.         /*
  26.             используй пропуски строк - как разделители между блоками кода
  27.             каждый блок несет какую-то законченную мысль, решает какую-то конкретную задачу
  28.  
  29.             пот после  open - я бы пропустила строку)
  30.         */
  31.         $(By.cssSelector("#new-todo")).append("The first task").pressEnter();
  32.         $(By.cssSelector("#new-todo")).append("The second task").pressEnter();
  33.         $(By.cssSelector("#new-todo")).append("The third task").pressEnter();
  34.         $(By.cssSelector("#new-todo")).append("The forth task").pressEnter();
  35.         $$(By.cssSelector("#todo-list li")).shouldHaveSize(4);
  36.         /*
  37.             и вот это - тоже блок - добавление тасок + проверка
  38.  
  39.             что до добавления тасок - советую использовать более лаконичные варианты для тестовых данных
  40.             task1, task2, ...
  41.             a, b, c
  42.             так код станет лаконичнее, и как следствие - его будет проще писать и легче читать
  43.  
  44.             что до возражений - а как же - мы же не оттестировали использование текстов тасок из нескольктх слов
  45.             то это надо тестить не на уровне Web UI Automation
  46.             а на уровне unit тестов
  47.             на уровне Web UI Automation - сосредосточимся на функциональных проверках
  48.             именно такой подход является наиболее эффективным
  49.  
  50.             по проверке
  51.              то, что провреяешь состояние все коллекции элементов "#todo-list li" - это верно
  52.              но - недостаточно точно
  53.              что будет - если таски добавятся в нужном количестве, но не с теми текстами, или не в той последовательности?
  54.              ведь это - тоже ошибки
  55.  
  56.              достаточно проверки shouldHave(exactTexts(....))
  57.                          как осуществяется проверка по кондишену exactTexts
  58.                          сверяется количество, порядок и тексты
  59.                              количество элементов коллекции должно быть равно количеству переданных текстов
  60.                              иначе - проверка не прошла
  61.                              и далее - по порядку сверяются текст элемента и переданный текст
  62.                              нулевой - с нулевым
  63.                              первый с первым
  64.                              и  т д
  65.                          таким образом - уже не нужно проверять размер списка
  66.                          раз уже проверили  exactTexts
  67.  
  68.              еще момент
  69.              можно код сделать чуть лаконичнее
  70.                  варианты
  71.                  $(By.cssSelector("#new-todo"))
  72.                  и
  73.                  $("#new-todo")
  74.  
  75.                  $$(By.cssSelector("#todo-list li"))
  76.                  и
  77.                  $$("#todo-list li")
  78.  
  79.                  технически - равноценны
  80.              
  81.              использовать ли метод append или setValue - тоже надо подумать)
  82.              была бы спецификация приложения - я бы руководстовалась ею при выборе варианта
  83.                  append - просто тодавляет текста в элемент
  84.                  setValue - очищает поле, и добавляет текста
  85.              в нашем случае - оба варианта ок - т к после нажатия на Enter - поле для добавления таски очищается    
  86.         */
  87.         $$(By.cssSelector("#todo-list li")).get(1).hover().findElementByCssSelector(".destroy").click();
  88.         /*
  89.             удаление таски + проверка после действия = еще один блок кода
  90.             проверки пока нет
  91.            
  92.             нам нужно было реализовать ТЕСТ на базе сценария
  93.             а ТЕСТ в принципе - включает шаги плюс проверки
  94.            
  95.             тест - это не только нужные действия
  96.             это еще и проверки результатов действий
  97.             и правильнее - не откладывать проверки
  98.             а делать их сразу после действий
  99.             т к именно это позволит нам понять - что конкретно работает не так как нужно
  100.            
  101.             и как писала выше - проверки должны касаться не только таски, с которой мы непосредственно работали
  102.             а всех тасок в списке
  103.             ведь ошибка может проявляться и так - после работы с одной таской - состояние другой(или других) тасок тоже как-то портиться
  104.            
  105.             есть причины и/или цели
  106.             по которым мы можем отложить проверку на несколько шагов
  107.             вот, например выше - мы выполнили проверку после добавления всех 4-ех тасок
  108.             даже если тест упал бы на той проверке - мы бы могли быстро понять - с чем у нас проблема - с добавлением тасок
  109.             т е - точности мы не потеряли, проверив состояние списка тасок аж после добавления 4-ой таски
  110.             пока - принимая решение - делать ли проверку или ее отложить - руководствуйся вот такими соображениями
  111.             но в целом правило такое - проверки нужно делать сразу
  112.              
  113.             после удаления таски - нужна проверка
  114.            
  115.             вместо .findElementByCssSelector(".destroy")
  116.             можно использовать .$(".destroy")
  117.             или .find(".destroy")
  118.             технически - это одно и то же
  119.         */
  120.  
  121.         $$(By.cssSelector("#todo-list li")).get(2).findElementByCssSelector(".toggle").click();
  122.         $(By.cssSelector("#clear-completed")).click();
  123.         /*
  124.             вот - еще один блок кода
  125.            
  126.             см выше - текст про то, как можно сделать код полаконичнее
  127.             и про проверки тоже)
  128.         */
  129.         $(By.cssSelector("#toggle-all")).click();
  130.         $(By.cssSelector("#clear-completed")).click();
  131.         /*
  132.             и еще один блок кода
  133.            
  134.             то же самое - про лаконичность и проверки
  135.         */
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment