julia_v_iluhina

Untitled

Dec 19th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.45 KB | None | 0 0
  1. public class TodoEndToEndTest {
  2. /*
  3.     EndToEnd - єто свойство тест-метода, а не тест-класса
  4.     и эта информация - мало помогает в понимании - что делает тест
  5.     потому - EndToEnd - нет смысла выносить в имя ни тест-класса, ни тест-метода
  6.  
  7.     И в данном случае - для тест-класса подошло бы имя - как в прошлой работе
  8.     а поскольку - хранить будешь работы в разных пекеджах, одинаковые имена классов не будут проблемой
  9. */
  10.     @Test
  11.     public void testTasksFlow() {
  12.  
  13.         open("https://todomvc4tasj.herokuapp.com");
  14.  
  15.         add("1", "2", "3");
  16.         /*
  17.             мы обсуждали в слеке - какие варианты неявных проверок - правильные
  18.             теперь - после добавления 3-ех тасок
  19.             операция edit("2", "222"); - не проверяет предыдущую
  20.             т к проверяет состояние лишь одной из 3-х тасок
  21.  
  22.             вот добавил бы одну таску - тогда и редактирование можно было использовать как неявную проверку
  23.         */
  24.         edit("2", "222");
  25.         /*
  26.             используй тестовые данные как подсказки
  27.             edit("2", "2 edited");
  28.             цель - далее понимать, что это за таска и что с ней происходило
  29.         */
  30.         delete("222");
  31.         /*
  32.             и вот эта операция - delete("222") - была бы хорошей неявной проверкой
  33.             если бы эта таска была единственной в списке
  34.  
  35.             также советую - не торопиться удалять таску
  36.             т к на ней еще разного можно напроверять
  37.  
  38.             и получится - что меньше тасок придется добавить
  39.  
  40.             следующая операция - toggle("3") - никак не проверяет операцию delete("222")
  41.             нужна проверка
  42.  
  43.             если не можешь использовать неявную проверку через действие - реализуй явную
  44.             но - проверять нужно сразу
  45.         */
  46.         toggle("3");
  47.         unToggle("3");
  48.         toggleAll();
  49.         unToggleAll();
  50.         /*
  51.             вопросы к терминам toggle и unToggle. Про это - ниже
  52.  
  53.             проверок - не хватает
  54.  
  55.             и это - не лучший способ проверить эти операции
  56.  
  57.             даже если они вообще не будут работать - тест пройдет
  58.         */
  59.         toggle("1");
  60.         /*
  61.             избегай повторений
  62.             complete - уже покрыто
  63.             и для smoke - этого достаточно
  64.  
  65.             снова отсылаю тебя к информации, что выдала в слеке, при обсуждении этого задания
  66.         */
  67.         clearCompleted();
  68.         assertTasksAre("3");
  69.  
  70.         filter("active");
  71.         /*
  72.             по организации переходов по фильтрам - почитай и примени
  73.             https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
  74.  
  75.             смотри какая тестовая ситуация у нас
  76.             на all - была в списке  - активная таска 3
  77.             перешли на active
  78.             в списке - снова та же таска 3 (кстати, этого ты не проверил)
  79.  
  80.             получается - что состояние списка - не поменялось
  81.             и мы не можем быть на 100% уверены - что фильтрация - работает
  82.             да, состояние списка - верное
  83.             но так могло быть и при условии, что фильтрация работает неверно
  84.  
  85.             для качественной проверки фильтра - нужна ситуация, когда
  86.             состояние списка тасок меяется
  87.             и новое состояние списка - верное
  88.  
  89.             это касается любого перехода с фильтра на фильтр
  90.  
  91.             не забывай про проверки
  92.         */
  93.         add("1", "2");
  94.         /*
  95.             не стоит добавлять новые таски с такими же текстами, как были у ранее удаленных
  96.             так будет тяжелее понимать - это какая таска 1 - ктороую мы создали вот тогда или вот тогда
  97.  
  98.             и снова - не торопись добавлять таски
  99.             в случае если видимых тасок в списке - более одной - использовать неявные проверки через действие  - не сможешь
  100.  
  101.             а это - очень желательно использовать
  102.             эффективность тестов вообще
  103.             и тестов, реализующих smoke покрытие в частности,
  104.             это очень важно
  105.             чем быстрее мы получим фидбек - какие проблемы у нас есть на уровне smoke - тем бістрее можно будет притупить
  106.             либо к более глубокому тестированию
  107.             либо к исправлению критичных ошибок
  108.  
  109.             т е - в smoke - не нужно делать лишнего
  110.             и тем не менее - проверено должно быть каждое действие
  111.             (если возможно - неявной проверкой через следующее действие, а нет - просто явной проверкой)
  112.             ведь если проверок недостаточно - и тест упал - то понять - что же пошло не так - будет проблематично
  113.             и это занятие - тоже будет жрать драгоценное время
  114.         */
  115.         assertTasksAre("3", "1", "2");
  116.         edit("3", "333");
  117.         delete("333");
  118.         toggle("1");
  119.         toggleAll();
  120.         clearCompleted();
  121.         /*
  122.             проверок не хватает
  123.             и все из тут покрытого - уже покрыто на all
  124.  
  125.             для smoke - каждое вісокоприоритетное действие - достаточно покрыть лишь единожды
  126.             покрыл edit на all фильтре, все  - больше не покрывай
  127.             и т д
  128.  
  129.             перечитай в слеке - наше обсуждение этих вопросов
  130.             там есть ответы - почему так
  131.  
  132.             единственное, что придется делать не единожды - это добавлять таски
  133.             но тоже - не стоит это делать бездумно
  134.             только минимально необходимое и только когда это нужно
  135.  
  136.             не забывай также - распределить покрытые операции по фильтрам - поравномернее
  137.             например - на all - покрыли 3 операции, на active - тоже 3, а на completed - 2 (это просто например)
  138.             такая картика - равномерная
  139.  
  140.             в отличие от такой
  141.             на all - покрыли почти все, на других фильтрах - почти ничего
  142.  
  143.             почему это важно - тоже было в слеке
  144.            
  145.             используй в работе табличку  или список с юз кейсами
  146.             это поможет спланировать оптимальное покрытие
  147.         */
  148.         assertNoTasks();
  149.  
  150.         add("1", "2", "3");
  151.         toggleAll();
  152.         /*
  153.             и покрыто ранее, и не проверено
  154.         */
  155.  
  156.         filter("completed");
  157.         edit("1", "111");
  158.         delete("111");
  159.         assertVisibleTasksAre("2", "3");
  160.         unToggle("2");
  161.         unToggleAll();
  162.         filter("all");
  163.         add("1", "2", "3");
  164.         toggleAll();
  165.         filter("completed");
  166.         clearCompleted();
  167.         /*
  168.             проверок - не хватает
  169.             много повторений
  170.  
  171.             на каждый фильтр - тоже - достаоочно лишь единожды зайти (т к реализуем Smoke покрытие)
  172.         */
  173.  
  174.         open("https://todomvc4tasj.herokuapp.com");
  175.         /*
  176.             это совсем непонятное действие
  177.             зачем?
  178.         */
  179.         add("1");
  180.         filter("active");
  181.         filter("all");
  182.         filter("completed");
  183.  
  184.         filter("all");
  185.         filter("completed");
  186.         filter("active");
  187.  
  188.         filter("all");
  189.         filter("active");
  190.         filter("completed");
  191.         /*
  192.             ну вот  - мы побегали по фильтрам
  193.             вопрос - мы что-то проверили?
  194.  
  195.             только то, что можем кликнуть на линке
  196.             а этого достаточно?
  197.  
  198.             не нужно повторений
  199.             нужны проверки
  200.         */
  201.     }
  202. ******************************************************
  203.     private void add(String... taskTexts) {
  204.  
  205.         for (String text : asList(taskTexts)) {
  206.             $("#new-todo").setValue(text).pressEnter();
  207.         }
  208.     }
  209.     /*
  210.         без asList - тоже все ок будет
  211.         почитай
  212.             http://www.linkex.ru/java/varargs.php
  213.             http://stackoverflow.com/questions/2161912/why-varargs-should-be-the-last-in-method-signature
  214.             http://www.java-tips.org/java-se-tips-100019/24-java-lang/481-using-the-varargs-language-feature.html
  215.     */
  216. **************************************************************
  217.     private void edit(String fromTaskText, String toTaskText) {
  218.         $$("#todo-list>li").find(exactText(fromTaskText)).doubleClick();
  219.         $(".editing .edit").setValue(toTaskText).pressEnter();
  220.     }
  221. /*
  222.     Примени знания из http://pastebin.com/4FpBTqDa (строки 92-112)
  223. */
  224.  
  225.     private void editAndCancel(String fromTaskText, String toTaskText) {
  226.         $$("#todo-list>li").find(exactText(fromTaskText)).doubleClick();
  227.         $(".editing .edit").setValue(toTaskText).pressEscape();
  228.     }
  229. /*
  230.     имя метода - будет точнее cancelEdit
  231.     т к мы отменяем редактирование (ключевой глагол = отменить)
  232.  
  233.     посмотри на код этого метода и метода edit
  234.     очень похожи
  235.  
  236.     реализуй метод xxx(название подбери сам - в соответствии с тем - что метод делает)
  237.     который выполнить весь одинаковый доя этих методов код
  238.     и вернет SelenideElement = элемент, в который ввели новый текст
  239.  
  240.      и далее будешь его переиспользовать - xxx(....).pressEnter();
  241. */
  242. ************************************************
  243.     private void filter(String taskStatus) {
  244.         $$("#filters li").find(exactText(taskStatus)).click();
  245.     }
  246. /*
  247.     и выше привела - что в faq почитать
  248.     и тут тоже http://pastebin.com/4FpBTqDa, строки 137-157
  249. */
  250. ************************************************************
  251.     private void assertTasksAre(String... taskTexts) {
  252.     private void assertVisibleTasksAre(String... taskTexts) {
  253.     private void assertNoTasks() {
  254. /*
  255.     тоже в слеке обсуждали, и видео ты смотрел
  256.  
  257.     хорошие варианты проверок - или 2 штуки, или 4
  258.     подними переписку
  259. */
  260.  
  261.  ******************************************
  262.  
  263.     private void toggle(String taskText) {
  264.         tasks.find(exactText(taskText)).$(".toggle").click();
  265.     }
  266.  
  267.     private void unToggle(String taskText) {
  268.         tasks.find(exactText(taskText)).$(".toggle").click();
  269.     }
  270.  
  271.     private void toggleAll() {
  272.         $("#toggle-all").click();
  273.     }
  274.  
  275.     private void unToggleAll() {
  276.         $("#toggle-all").click();
  277.     }
  278. /*
  279.     посмотри на перевод  слова toggle = переключить
  280.     unToggle =  ??
  281.  
  282.     методы toggle и unToggle - делают одно и то же
  283.     пересмотри видео предыдущее - почему для метода, который мы использовали для закомпличивания
  284.     мы выбрали название toggle, а не complete
  285.  
  286.     название метода - должно четко отражать то, что метод делает
  287.     независимо от контекста его вызова
  288.  
  289.     судя по реализации =  unToggle - это reopen
  290.     примени этот метод к активной таске
  291.     какое действие будет выполнено?
  292.  
  293.     лучшее, но не единственное, решение -
  294.     оставить методы toggle и  toggleAll
  295.     и их использовать как для закомпличивания, так и для переоткрытия
  296.  
  297.     еще раз отошлю тебя к нашим обсуждениям в слеке
  298.     reopen all - в рамках smoke - покрывать не стоит
  299.     найди этот текст
  300. */
  301. ******************************************
  302.  
  303.     private void listCompletedEmpty() {
  304.         $$(".completed").shouldBe(empty);
  305.     }
  306. /*
  307.     метод не применяется и он по многим причинам не хорош
  308.  
  309.     в прошлом видео - примерно на 58-ой минуте было про это
  310.     про то, какие проверки нужны, и нформация у тебя есть, это обсуждали в слеке плюс я расшарила тебе видео про это
  311.  
  312.     также - работать с коллекцией $$(".completed") (даже если бы тебе нужна была коллекция закомпличеных тасок) - неверно
  313.     см http://pastebin.com/4FpBTqDa
  314.    
  315.     ну и название метода-проверки - уже тоже обсуждали - с чего должно начиаться и почему
  316. */
  317. **********************************
  318.     private void itemsLeftCounter(String valueTasksCounter) {
  319.         $("#todo-count strong").shouldHave(exactText(valueTasksCounter));
  320.     }
  321. /*
  322.     это метод - проверка? поправь ему имя
  323.    
  324.     что мы проверяем - количество активных тасок
  325.     разумнее оперировать параметром-числом для этого метода
  326.    
  327.     сама реализация метода - ок
  328.      
  329.     советую подумать и над именем метода, и над именем параметра
  330.     с одной стороны - должна быть точность
  331.     с другой - лишнего тоже не стоит писать
  332. */
Advertisement
Add Comment
Please, Sign In to add comment