julia_v_iluhina

Untitled

Jul 24th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.90 KB | None | 0 0
  1. public class TodoMVCTest {
  2.  
  3.     @Test
  4.     public void testTasksLifeCycle() {
  5.  
  6.         open("https://todomvc4tasj.herokuapp.com/");
  7.  
  8.         add("a", "b");
  9.         assertTasks("a", "b");
  10.  
  11.         edit("a", "a edited");
  12.         assertTasks("a edited", "b");
  13.         assertItemsLeft(2);
  14.  
  15.         //complete
  16.         toggle("b");
  17.         assertVisibleTasks("a edited", "b");
  18.         /*
  19.             все хорошо с покрытыми операциями и проверками
  20.             только вот неявные проверки через действие тебе использовать не удалось
  21.            
  22.             а все потому, что 2 таски сразу добавил
  23.            
  24.             реально было - добавить одну
  25.             ее же отредактировать и закомплитить
  26.            
  27.             и сюда прийти с одной видимой таской
  28.             а после перехода а active фильтр - в списке не было бы ни одной таски
  29.             и уже тогда бы довавил вторую таску
  30.            
  31.             это бы тебе дало - возможность использовать неявные проверки через действие          
  32.            
  33.         */
  34.  
  35.         filterActive();
  36.         assertVisibleTasks("a edited");
  37.         /*
  38.             А почему мы тут никаких действий не покрываем?
  39.            
  40.             я писала про этот момент в прошлый раз
  41.             https://www.refheap.com/119143, строки 139 - 147
  42.            
  43.             это важно и это надо поправить
  44.            
  45.             на каждом из фильтров должна быть покрыта часть тестируемых действий
  46.             распредели действия равномернее
  47.            
  48.             Тут ты мог бы покрыть
  49.             add (если бы раньше не торопился добавлять 2 таски сразу
  50.             cancelEdit
  51.             complete all
  52.            
  53.             как раз перед переходом на Completed фильтр - убедился бы - что список тасок пуст
  54.             потом перешел - и убедился - что в списке таски отображаются
  55.            
  56.             а на Completed - покрыл бы reopen и clearCompleted();
  57.            
  58.             тогда вернувшись на All - ты бы достаточно точно покрыл этот переход на фильтр
  59.             да и осталось бы - только покрыть удаление таски
  60.             она как раз одна бы была
  61.         */
  62.  
  63.         filterCompleted();
  64.         assertVisibleTasks("b");
  65.  
  66.         cancelEdit("b", "b cancel edit");
  67.         assertVisibleTasks("b");
  68.  
  69.         //reopen
  70.         toggle("b");
  71.         assertVisibleTasksEmpty();
  72.  
  73.         filterAll();
  74.         assertTasks("a edited", "b");
  75.  
  76.         delete("a edited");
  77.         assertTasks("b");
  78.  
  79.         add("a");
  80.         /*
  81.             читай выше - как оптимизировать сценарий
  82.            
  83.             оптимизируй его
  84.             тут можно обойтись без создания тасок вполне
  85.            
  86.             это уже на будущее
  87.             даже если ты ранее удалил таску  а
  88.             не добавляй новую с таким же именем
  89.             это усложняет код
  90.             ты смотришь на код и уже думаешь - это какая а - та которая добавлена тогда-то или тогда-то
  91.             или вообще такой вопрос себе не задаешь и думаешь, что это та, первая добавленная таска а
  92.             короче - или долго думать, или заблуждаться
  93.             из-за такой мелочи
  94.             лучше просто использовать для разных тестовых данных - разные значения
  95.             и с такой проблемой не столкнешься
  96.            
  97.         */
  98.         assertTasks("b","a");
  99.  
  100.         //complete all
  101.         toggleAll();
  102.         clearCompleted();
  103.         assertTasksEmpty();
  104.     }
  105.  
  106.  
  107.     private SelenideElement startEditing(String oldText, String newText) {
  108.         tasks.findBy(exactText(oldText)).doubleClick();
  109.         return tasks.find(cssClass("editing")).find(".edit").setValue(newText);
  110.     }
  111.  
  112.   /*
  113.     настаиваю на именах параметров oldTaskText & newTaskText
  114.    
  115.     у тебя получается, что для текста таски ты применяешь 2 термина - Text и TaskText
  116.     это не однозначность
  117.     не надо допускать неоднозначностей
  118.    
  119.     одно понятие обозначай одним именем
  120.     это позволит писать понятный и однозначный код
  121.    
  122.     в других методах тоже поправь
  123.  
  124.   */
  125. *****************
  126.     private void filterAll() {
  127.         $$("a").findBy(exactText("All")).click();
  128.     }
  129. /*
  130.  
  131.     Тут можно применить  $(By.linkText(...))
  132.    
  133.     в данном случае вариант $$("a").findBy(exactText("All")) - не дает никаких преимуществ
  134.    
  135.     эта точность - не помогает
  136.    
  137.     да и точным селектор "a" - не назовешь
  138.    
  139. */
Advertisement
Add Comment
Please, Sign In to add comment