julia_v_iluhina

Untitled

Jan 6th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.92 KB | None | 0 0
  1.     @Before
  2.     public void openPage() {
  3.         open("https://todomvc4tasj.herokuapp.com");
  4.     }
  5.  
  6.   ....
  7.  
  8.     @Test
  9.     public void testTaskFlow() {
  10.  
  11.         openPage();
  12. /*
  13.     раз уже метод openPage() аннотирован как Before
  14.     вызывать в тест-методе openPage() - это делать openPage() дважды
  15.  
  16.     http://junit.sourceforge.net/javadoc/org/junit/Before.html
  17. */
  18. ***********************************
  19. /*
  20.     4 фиче-теста из 6 - работают на all фильтре
  21.     неравномерно распределены покрытые операции по фильтрам
  22.     это недостаток покрытия
  23. */
  24. ***********************************
  25. //твой вариант
  26.     @Test
  27.     public void testDelete() {
  28.         add("1", "2");
  29.         assertTasksAre("1", "2");
  30.         assertItemsLeft(2);
  31.         delete("2");
  32.         assertTasksAre("1");
  33.         assertItemsLeft(1);
  34.     }
  35. //вариант, который советую я
  36.     @Test
  37.     public void deleteAtAll() {
  38.         //given
  39.         add("1", "2");
  40.  
  41.         delete("2");
  42.         assertTasksAre("1");
  43.         assertItemsLeft(1);
  44.     }
  45. /*
  46.     оформление
  47.         в названии тест-метода - указать - на каком фильтре покрываем фичу
  48.  
  49.         перед гивен-блоком - добавить комментарий - /given - ...
  50.         ... - если нужно что-то уточнить
  51.         что из кода не совсем ясно
  52.         в данном случае - уточнять было нечего
  53.  
  54.         проверки после предварительніх действий - делать в данном случае не нужно
  55.  
  56.         между гивен-блоком и тестовыми действиями - пропуск строки
  57.         цель - явно подчеркнуть - где что - где гивен-действия, а где - тестируемое действие
  58.  
  59.         в именах тест-методов - придерживайся одной логики
  60.         если начинаешь имя метода с test - то пусть это касается всех тест-методов
  61.         когда то так, то так - это смущает - возникают ненужные вопросы к коду
  62.         понятно, что в некоторых методах ты добавил в начале имени - test - чтоб была разница со вспомогательным методом
  63.         в данном случае - в именах тест-методов будет указано - на каком фильтре покрываем действие
  64.         и проблемы с одинаковыми именами вспомогательных методов и тест-методов  - в принципе не будет
  65. */
  66. ********************************************
  67. //или - более интересный случай
  68.         @Test
  69.         public void editByClickOutsideField() {
  70.             add("123");
  71.             toggle("123");
  72.             filterCompleted();
  73.             assertTasksAre("123");
  74.             startEditThenClickOutside("123", "123 edited");
  75.             assertTasksAre("123 edited");
  76.  
  77.         }
  78. //вариант, который советую я
  79.         @Test
  80.         public void editByClickOutsideAtCompleted() {
  81.             //given - completed task
  82.             add("123");
  83.             toggle("123");
  84.             filterCompleted();
  85.  
  86.             startEditThenClickOutside("123", "123 edited");
  87.             assertTasksAre("123 edited");
  88.             assertItemsLeft(0);
  89.         }
  90. /*
  91.     те же моменты, что описывала выше
  92.  
  93.     уточняться в имени метода до Field - нет смысла
  94.     мало что дает для наглядности и точности имени
  95.  
  96.     тут гивен-блок - уже посложнее
  97.     и в комментарии - уже есть резон написать чуть больше - //given - completed task
  98.  
  99.     assertItemsLeft - разумно покрыть в каждом фиче-тесте, в рамках проверок после тестируемого действия
  100.     второй проверкой - как менее важное
  101.  
  102.     это стоит сделать - т к это практически не усложняет код
  103.     но улучшает покрытие и точность проверок
  104.  
  105.     в е2е мы не злоупотребляли проверками assertItemsLeft - т к он и без того сложный
  106.     и это бы код загромождало, в е2е было достаточно сделать это единожды
  107.     проще это подробнее проверить в более простых обстоятельствах
  108. */
  109. ***********************************************
  110. /*
  111.     имя фиче-теста - что тестим и на каком фильтре
  112.  
  113.     структура фиче-теста
  114.       предварительные действия
  115.       тестируемое действие
  116.       проверки
  117.  
  118.     предварительные действия начнем с комментария //given - ...
  119.     чтоб было понятно - что это предварительные действия и что за ситуацию мы в результате их получим
  120.     внутри и в конце блока предварительных действий - проверок не делаем
  121.     (мы это тут не тестируем, а используем для создания тестовой ситуации, ниже будет подробнее)
  122.  
  123.     после предварительных действий - пропустим строку
  124.     чтоб выделить - вот подготовка, вот - тестируемое действие
  125.  
  126.     проверки
  127.     сначала - более важные
  128.     затем - менее важные
  129.     (собственно - так ты и реализовал)
  130.     такой порядок - чтобы даже если тест упадет на менее важной проверке - был фидбек о важной проверке
  131.  
  132.     еще - в фиче-тестах мы можем себе позволить более интересные тестовые ситуации
  133.     например - редактирование второй таски в списке
  134.  
  135.     в итоге - с учетом этих рекомендаций - получим
  136. */
  137. ***************************************************
  138. /*
  139.  
  140.     Это к общему сведению
  141.    
  142.     Есть разные способы выполнять предварительные действия
  143.     Мы сейчас делаем это через действия на UI (User Interface)
  144.     А есть еще методы - работать непосредственно с данными (далее вы такое тоже попробуете)
  145.     Так вот через действия на UI - предварительные действия не быстрые и часто недостаточно надежные
  146.     А через непосредственную работу с данными - предварительные действия быстрые и надежные
  147.    
  148.     Если предварительные действия медленные или ненадежные
  149.     То проверка в конце предварительных действий нужна
  150.    
  151.     А если мы уверены - что после предварительных действий гарантировано все ОК,
  152.     то и проверок не надо после предварительных действий    
  153.    
  154.     Но, поскольку наше приложение - простое
  155.     Разумно не делать проверку в конце предварительных действий
  156.     чтобы наши тесты были эффективнее
  157.    
  158.     Тестировали бы что-то типа соцсети и если бы предварительные действия были
  159.     реализованы через UI - да, после предварительных действий было бы разумно
  160.     выполнить проверку (проверка после предварительных действий нам позволяет отличить -
  161.     ошибка возникла на этапе выполнения тестируемого действия, или все же раньше)
  162.    
  163. */
Advertisement
Add Comment
Please, Sign In to add comment