julia_v_iluhina

Untitled

Nov 3rd, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.89 KB | None | 0 0
  1. public class AtTodoMvcPageWithClearedDataAfterEachTest extends BaseTest {
  2.  
  3.  
  4. //    @Before
  5. //    public void openPage() {
  6. //        open("https://todomvc4tasj.herokuapp.com/");
  7.  
  8.  
  9.  
  10.     }
  11.  
  12. //    @After
  13. //    public void clearData() {
  14. //        executeJavaScript("localStorage.clear()");
  15. //    }
  16. /*
  17.     по сути - у класса уже нету полезной функциональности
  18.     такой класс нужно удалить из проекта
  19. */
  20. *************************
  21. public class TodoMvcTest extends BaseTest {
  22. /*
  23.     тут - ок, наследуешься уже от BaseTest
  24.     т е класс AtTodoMvcPageWithClearedDataAfterEachTest - можешь удалить безболезненно
  25. */
  26. ************************
  27.  private void ensure() {
  28.         if (url() != "https://todomvc4tasj.herokuapp.com") open("https://todomvc4tasj.herokuapp.com/");
  29.  }
  30. /*
  31.     имя метода - надо уточнить - что мы обеспечиваем
  32.     ensureUrlOpened -  будет лучше
  33.  
  34.     строки сравнивать нужно, используя метод equals, а не операторы == или !=
  35.       http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java
  36.       http://www.javatpoint.com/string-comparison-in-java
  37.       http://alvinalexander.com/java/edu/qanda/pjqa00001.shtml
  38.     при таком коде, как у тебя сейчас - в любом случае будем выполняться open
  39.     т е - по сути - ничего не оптимизировали, лишь добавили лишней логики
  40.  
  41.     используй фигурные скобки для if-блока
  42.     https://google.github.io/styleguide/javaguide.html#s4.1.1-braces-always-used
  43. */
  44. *******************************
  45.     @Test
  46.     public void editTaskActiveFilter() {
  47.         given();
  48.         givenAtActive(ACTIVE, "a");
  49. /*
  50.     посмотри - что мы делаем в given() и givenAtActive(ACTIVE, "a")
  51.     разве нам нужно предварительно вызывать given()?
  52.     ведь и в givenAtActive(ACTIVE, "a") - вызывается открытие урла, подготовка локалсториджа и обновление страницы
  53.  
  54.     касается всех тест-методов
  55. */
  56. ****************************
  57.  
  58.     @Test
  59.     public void editTaskActiveFilter() {
  60.     ...
  61.   @Test
  62.     public void editAllFilter() {
  63.  /*
  64.     напоминаю про тест-план
  65.     https://docs.google.com/spreadsheets/d/1erCY9k7T6tNC11OylZr_cT8D84QJWZIfzBGXt7BhF3g/edit#gid=441152562
  66.  
  67.     запланировано - покрыть edit на 3-х фильтрах
  68.     а реализовано - лишь 2 тест-метода
  69.  
  70.     требуется 3 тест-метода для каждого из фильтров
  71.     т к в твоем тест-плане - редактирование на Completed фильтре имеет средний приоритет
  72.     в рамках full coverage(даже оптимизированного) - операции со средним приоритетом мы покрываем
  73.  
  74.     названия тест-методов - в одних - ты уточняешься до Task, в других - нет
  75.  
  76.     еще в работе по Smoke+F писала тебе
  77.         вариант 1 deleteTaskAtAllFilter()
  78.         вариант 2 deleteTaskAllFilter()
  79.  
  80.         вариант с At - корректнее )
  81.  
  82.         не настаиваю, но советую
  83.  
  84.     все же подправь
  85.         editAtActiveFilter
  86.         editAtAllFilter
  87.  
  88.     проработай все имена всех тест-методов
  89.     чтобы логика их имен была единообразной
  90.  
  91.     порядок тест-методов
  92.     тест-методов - много
  93.     чтобы было легче в них ориентироваться
  94.     разумнее расположить их согласно тест-плану
  95.         либо - продвигаясь по тест-плану сначала по строкам, потом - по столбцам
  96.         (тогда сначала будут идти все 3 метода для edit, потом - для delete и т д)
  97.  
  98.         либо - продвигаясь по тест-плану сначала по столбцам, потом - по строкам
  99.         (тогда сначала будут идти все методы для All фильтра, потом - для Active и т д)
  100.     оба варианта имеют свои плюсы, но они однозначно лучше хаотичного расположения тест-методов
  101.     хотя технически - поряок тест-методов не имеет никакого значения
  102.     тебе и самому это поможет проконтролировать - все ли что нужно покрыто
  103.     и достаточно ли разнообразны тестовые ситуации для тестирования одного и того же действия
  104.  
  105. */
  106. *************************************************
  107.  
  108.     @Test
  109.     public void deleteTaskAllFilter() {
  110.         given();
  111.         given(ACTIVE, "a", "b");
  112.  
  113.         delete("a");
  114.  
  115.         assertTasksAre("b");
  116.         assertItemsLeft(1);
  117.     }
  118.     ...
  119.   @Test
  120.     public void deleteAllFilter() {
  121.         given();
  122.         given(ACTIVE, "b");
  123.  
  124.         delete("b");
  125.  
  126.         assertTasksEmpty();
  127.     }
  128.     ...
  129. /*
  130.     обрати внимание - реализованы 2 метода, а не 3
  131.     и оба - для all фильтра
  132.  
  133.     упорядоч тест-методы и иди по тест-плану
  134.     таких ошибок будет избежать легче
  135.  
  136.     далее покрытие не проверяю - проработай тест-план самостоятельно
  137.     покрой все что запланировано
  138. */
  139. **********************
  140. public void canceleditTaskAllFilter()
  141. /*
  142.     не забывай про CamelCase написание имен методов
  143.     https://google.github.io/styleguide/javaguide.html#s5.3-camel-case
  144.     не canceledit
  145.     а  cancelEdit
  146. */
  147. **************************
  148. @Test
  149.     public void deleteByEmpltyingText() {
  150.     /*
  151.         Empltying или Emptying
  152.         IntelIJ Idea подчеркивает ошибки спеллинга зеленой волнистой линией
  153.         обращай на это внимание
  154.  
  155.         не забывай уточнять в имени метода - на каком фильтре это покрыто
  156.     */
  157.         given();
  158.         given(ACTIVE, "a", "b");
  159.  
  160.         edit("b", "");
  161.  
  162.         filterActive();
  163.         /*
  164.             для проверки того, что таска удалилась
  165.             не нужно переходить на другой фильтр
  166.             достаточно првоерить состояние списка тасок и ItemsLeft
  167.         */
  168.  
  169.         assertTasksAre("a");
  170.         assertItemsLeft(1);
  171.     }
  172. ************************************
  173. private void submitEdit(String oldText, String newText) {
  174. private void submitEditByClickOutside(String oldText, String newText
  175. /*
  176.     раз у нас есть 2 варианта подтверждения редактирования - в именах обоих методов
  177.     уточни - как действие выполнено
  178.  
  179.     вместо submitEdit
  180.     нужно  submitEditByPressTab
  181. */
  182. ************************************
  183.     @Step
  184.     private void submitEditByClickOutside(String oldText, String newText) {
  185.         startEdit(oldText, newText);
  186.         toggle("b");
  187.     }
  188. /*
  189.     плохой вариант использовать toggle("b"); для клика на чем-то другом
  190.     во-первых, где гарантии - что будет такая таска - "b"
  191.     во-вторых, при выполнении toggle("b") - выполняется не только смена фокуса, но и еще какие-то действия
  192.     состояние таски "b" - меняется.
  193.  
  194.     А нам нужно - лишь изменить фокус =
  195.     был активный элемент = редактируемая таска
  196.     стал активный элемент = по которому мы кликнули
  197.  
  198.     т е - нам нужен такой элемент для клика
  199.     при клике на котором ничего не будет происходить
  200.  
  201.     можно было бы просто кликнуть на другой таске
  202.     но не факт, что она есть
  203.     да и добавлять третьим параметром - на какой таске кликнуть - это перебор
  204.     так что это - плохой вариант
  205.  
  206.     можно кликнуть на чем-то типа #header>h1
  207.     это уже значительно лучше
  208.     т к ничего, кроме смены фокуса, не происходит
  209.     что нам и нужно
  210.     и т к этот элемент есть всегда
  211.     единственный недостаток - это то, что мы используем еще один независимый селектор
  212.  
  213.     можно ли обойтись теми, что мы уже используем?
  214.     есть вариант - "#new-todo"
  215.     мы и уже используем $("#new-todo")
  216.     он всегда есть
  217.     и при клике на нем - ничего кроме смены фокуса не произойдет
  218.     идеальный кандидат)
  219.  
  220.     только учти вот это
  221.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.4i6i27d7lwn4
  222. */
  223. *********************************
  224.     @Test
  225.     public void toggleAllFilter() {
  226.         given();
  227.         given(ACTIVE, "a");
  228.  
  229.         toggle("a");
  230.  
  231.         assertTasksAre("a");
  232.     }
  233. /*
  234.     для вспомогательного метода имя toggle - точное
  235.     т к на уровне вспомогательного метода - мы не знаем, комплитим мы таску или переоткрываем
  236.     все зависит от того, к какой таске мы применяем этот метод
  237.  
  238.     а вот а уровне тест-метода
  239.     мы конечно же знаем - что мы делаем
  240.     мы же сами дикутем тестовые ситуации
  241.     тут мы работакем с кативной таской и вызываем для нее toggle
  242.     значит - мы комплитим таску
  243.     и тест- метод надо назвать соответственно - completeAtAll
  244.  
  245.     не забывай везде, где это возможно, - второй проверкой проверять ItemsLeft
  246.     это улучшает покрытие и уточняет проверки
  247. */
  248. ****************************************
  249.     @Test
  250.     public void clearCompletedAllFilter() {
  251.         given();
  252.         given(ACTIVE, "a", "b");
  253.  
  254.         toggleAll();
  255.  
  256.         assertTasksAre("a", "b");
  257.  
  258.         clearCompleted();
  259.         assertVisibleTasksEmpty();
  260.     }
  261. /*
  262.     если мы реализуем фиче-тест для clearCompleted
  263.     то нужно в предварительных действиях создать и закомпличеные таски
  264.     чтобы затем не требовалось дополнительно таски комплитить
  265.  
  266.     у тебя получился небольшой е2е в 2 действия - complete all + clear completed
  267.     начнем с того, что complete all на all фильтре уже покрыто в е2е
  268.     и более не нужно это повторять
  269.     и второе - лучше реализовать именно фиче-тесты в дополнение к уже существующему е2е
  270.  
  271.     е2е - проверит, как действия работают всместе в одном сценарии - интеграционная проверка
  272.     а фиче-тесты - независимо (что очень важно) проверят каждую операцию отдельно
  273. */
  274. **************************
  275.     @Test
  276.     public void reopenAssertItemsLeft() {
  277.         given();
  278.         given(ACTIVE, "a");
  279.  
  280.         toggleAll();
  281.  
  282.         assertItemsLeft(0);
  283.  
  284.         //reopen
  285.         toggle("a");
  286.  
  287.         assertItemsLeft(1);
  288.     }
  289. /*
  290.     еще один е2е
  291.  
  292.     давай все же реализуем фиче-тест для reopen
  293.  
  294.     сразу создавай и закомпличеные таски - на уровне гивен-метода
  295.     тогда не понадобится комплитить таску
  296.     все эти лишние действия - они ведь тоже могут работать с ошибкой
  297.     в результате - мы так и не проверим reopen - из-за того, что делали лишние действия
  298.  
  299.     собственно - потому фиче-тесты и независимые
  300.     т к мы проверяем (и выполняем) лишь одно действие
  301.     все фиче-тесты имеют простую структуру
  302.         предварительные действия
  303.         тестируемое действие
  304.         проверка(или проверки)
  305.     это уже мы обсуждали ранее, просмотри ревью к прошлым заданиям
  306.  
  307.     в имени тест-метода - не нужно указывать про ItemsLeft
  308.     мы это делали практически во всех тест-методах
  309.     и делали это по пути
  310.     это не такая важная информация - чтоб ее выносить на уровень имени тест-метода
  311.  
  312.  
  313. */
  314. ****************************
  315. /*
  316.     очень многих тест-методов не хватает
  317.     работай с тест-планом
  318.  
  319.     приведи линку и на тест-план тоже - когда в следующий раз отдащь хадание на ревью
  320.  
  321.     сложностей по сути - уже не осталось
  322.     нужно очень внимательно проработать кучу деталей
  323.  
  324.     если это сделать тщательно - реально за один цикл закончить с этой работой
  325. */
Advertisement
Add Comment
Please, Sign In to add comment