julia_v_iluhina

Untitled

Sep 12th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.55 KB | None | 0 0
  1. сразу несколько вопросов:
  2. 1. что я забыла проверить или что нужно проверить иначе)
  3. /*
  4.     это я откомменчу по ходу сценария
  5.     есть вопросы к использованию неявных проверко через действие
  6.     и к проверкам списка тасок на Active и Completed фильтрах
  7. */
  8. 2. правильно ли реализована проверка assertTasksAre и assertNoTasks?
  9. Можно ли использовать visible или лучше делать эти методы под каждую вкладку отдельно?
  10. /*
  11.     проверки assertTasksAre и assertNoTasks - можно оставить с такой реализацией
  12.     для других фильтров - правильнее использовать проверку списка тасок, отфильтрованного по кондишену visible
  13.     такие проверки подойдут как для Active, так и для Completed фильтра
  14.  
  15.     для принятия окончательного решения - почитай мои комментарии по ходу сценария и посмотри видео
  16.     https://drive.google.com/file/d/0B8hgIBw8-V-AdGxxU1R3enl1RzQ/view?ts=567ab8d7
  17. */
  18.  
  19. ******************************************************************
  20. /*
  21.     сначала приведу общие пояснения, в коде - будут подробности
  22. */
  23. /*
  24.     про использование неявных проверок через действие
  25.               вариант 1
  26.               add("task1"");
  27.               edit("task1", "task1 edited");
  28.               delete("task1 edited");
  29.  
  30.               вариант 2
  31.               add("task1", "task2");
  32.               edit("task2", "task2 edited");
  33.               delete("task2 edited");
  34.  
  35.            Вариант 1 = правильное использование таких проверок через действие
  36.  
  37.            Вариант2 = не правильное использование
  38.            Т к последующие действия не проверяют состояние ВСЕХ тасок в списке
  39.  
  40.            Таким образом - ты сможешь эффективно использовать неявные проверки через действия только в случае,
  41.            если в списке тасок будет видима лишь одна таска
  42.  
  43.            Также не забывай - после каждого действия должна быть выполнена проверка
  44.            Сразу
  45.            Не получается использовать неявную проверку через следующее действие - используй явную
  46.            Но - действие должно быть обязательно проверено сразу
  47. */
  48.  
  49. *******************************************************************
  50.  
  51. public class TodoMvcTest {
  52.  
  53.     @Test
  54.     public void smokeE2ETest(){
  55.     /*
  56.         то, что тест реализует smoke-покрытие - это важная информация
  57.         но - ее правильно отражать не в имени тест-метода или тест-класса
  58.         т к smoke-покрытие может быть реализовано несколкими тест-методами, и не факт, что одного тест-класса
  59.         дальше по курсу - будет информация, как правильно показывать это
  60.  
  61.         молодец, что видишь важность этой информации
  62.         но - пока не надо это отражать
  63.  
  64.         насчет E2E
  65.         глядя на кот тест-метода - мы это и так поймем
  66.         а если не смотреть на код - инвормция о том, что тест - это E2E
  67.         мало добавит понимания
  68.  
  69.         тут имя тест-метода можно как и в прошлой работе сделать
  70.         ну или воспользоваться другими советами из
  71.         https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.2gjiy0o1o48q
  72.     */
  73.         open("https://todomvc4tasj.herokuapp.com/");
  74.  
  75.         add("1", "2", "3", "4");
  76.         assertTasksAre("1", "2", "3", "4");
  77.         /*
  78.             не торопись добвалять сразу несколько тасок
  79.             ведь таким образом - становится невозможно эффекивно использовать неявные проверки
  80.         */
  81.  
  82.         edit("2", "02");
  83.         /*
  84.             применив вариант
  85.             edit("2", "2 edited");
  86.             далее по тексту таски - будет понятно - что с ней было до этого
  87.             используй тестовые данные для пояснений)
  88.  
  89.             так можно дать дополнительное понимание и сэкономить на комментариях
  90.         */
  91.         toggle("02");
  92.         /*
  93.             вот toggle("02") - можно было бы использовать как неявную проверку для edit("2", "02")
  94.             если бы "02" - была единственной таской в списке
  95.  
  96.             т к toggle("02") - проверяет только состояние таски "02"
  97.             как дела обстоят с остальными - мы не знаем
  98.  
  99.             каждая проверка - должна проверять состояние всех тасок
  100.  
  101.             так что - нужно все же пересмотреть взгляды на добавление тасок
  102.             и пока ограничиться добавлением одной таски
  103.             или второй вариант - необходимы проверки после каждой из операций
  104.             первый вариант нам подходит больше - т к мы боремся за максимальную эффективность
  105.  
  106.             после toggle("02"); - тоже не хватает проверки
  107.             т к - следующая операция не проверит закомпличивание таски
  108.  
  109.             логичнее было бы проверить тексты тасок после toggle("02");
  110.             тем самым - мы бы проверили логику -
  111.             что на all фильтре все таски отображаются независимо от их статуса
  112.             а проверка списка тасок после перехода на Active фильтр -
  113.                 с одной стороны - проверит - как работает переход на филььр
  114.                 с другой - допроверит закомпличивание таски
  115.  
  116.             в целом - хорошая стратегия - начать сценарий так
  117.                 добавить таску
  118.                 отредактировать таску
  119.                 закомплитить таску
  120.             вопросы только к проверкам
  121.         */
  122.  
  123.         switchFilter("Active");
  124.         /*
  125.             почитай вот это
  126.             https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
  127.             и прими решение - как лучше реализовать методы для переходов на нужный фильтр
  128.         */
  129.  
  130.         assertActiveTasksAre("1", "3", "4");
  131.         /*
  132.             вот тут - отлично получилось проверить переход на другой фильтр
  133.             было в списке - таски "1", "02", "3", "4"
  134.             перешли на другой фильтр
  135.             стало в списке - таски "1", "3", "4"
  136.  
  137.             стало = правильное (условие необходимое)
  138.             было-стало - отличаются (условие достаточное - если бы было-стало совпадали -
  139.             мы бы не могли утверждать - что переход на фильтр работает - такое возможно, если при
  140.             переходе на фильтр вообще ничего не происходит. потому - важно, чтобы и вот это второе условие выполнялось)
  141.             таким образом - переход на другой фильтр  проверен точно
  142.  
  143.             единственное - вот такая проверка - проверка списка тасок, отфильтрованных по классу active
  144.             не совсем то, что нам надо
  145.             даже если в списке будут отображаться таски с другими классами - эта проверка пройдет
  146.             а нам надо - проверить логику - на таком-то фильтре видны такие-то таски
  147.             т е - достаточно проверить тексты только видимых тасок
  148.             так что - верный вопрос задала)
  149.             да, используй проверки списка тасок, отфильтрованного по visible
  150.  
  151.             а про проверки списка, отфильтрованного по классу (active или completed)
  152.             было в видео https://drive.google.com/file/d/0B8hgIBw8-V-AUDhxWDg1YmYxM3c/view
  153.             примерно с 58-ой минуты
  154.         */
  155.         toggleAll();
  156.         assertNoActiveTasks();
  157.         /*
  158.             покрыть на active фильтре - complete all - отличная идея
  159.  
  160.             если на all - не будешь добавлять лишних тасок
  161.             то тут придется еще одну таску добавить
  162.             также советую тут покрыть cancel edit - это тоже высокоприоритетная операция
  163.             и хорошо впишется в этот сценарий
  164.  
  165.             хорошо, что после complete all выполнила проверку
  166.             единственное - она у тебя изменится - будешь проверять список тасок,
  167.             отфильтрованных по visible
  168.         */
  169.  
  170.         switchFilter("Completed");
  171.         /*
  172.             вот тут - не хватает проверки
  173.             у тебя на этот момент - не одна таска в списке
  174.             значит - операция delete("1"); не проверит состояние всего списка тасок
  175.         */
  176.  
  177.         delete("1");
  178.         assertTasksAre("02", "3", "4");
  179.         /*
  180.             советую удаление покрыть уже после возвращения на all
  181.             если выполнишь мои рекомендации по добавлению тасок - ты на этот фильтр придешь с 2-мя тасками
  182.  
  183.             одну активируешь, вторую удалишь через clearCompleted();
  184.             как раз - чтобы вернуться на  all хотя бы с одной таской и проверить переход на фильтр
  185.  
  186.             прикольно было бы вернуться на  all с таской, созданной на active
  187.             так бы ты дополнительно проверила - нормально на all работать с тасками,
  188.             созданными на другом фильтре
  189.         */
  190.  
  191.         activate("3");
  192.         /*
  193.             насчет имени метода - ниже обсудим
  194.         */
  195.         assertTasksAre("02", "4");
  196.         assertItemsLeft(1);
  197.         /*
  198.             хорошо вмостила проверку assertItemsLeft
  199.         */
  200.  
  201.         clearCompleted();
  202.         assertNoTasks();
  203.         /*
  204.             что касается набора покрытых действий на этом фильтре - практически все ок
  205.             хороший вариант
  206.             activate
  207.             clear completed
  208.  
  209.             вот delete - стоит перенести
  210.  
  211.             теперь арифметика
  212.                 на проверку clear completed мы потратили 2 таски (а можно было потратить лишь одну)
  213.                 и еще в конце - осталась одна
  214.                 значит  - 2 из четырех добавленных тасок - можно было сэкономить)
  215.  
  216.             ты, конечно, можешь возразить что проверять complete all или clear completed -
  217.             лучше на нескольких тасках
  218.             да, мы так будем делать - когда будем приложение тестировать глубже
  219.             а пока - у нас задача - написать максимально быстрый е2е, который реализует smoke покрытие
  220.             и мы - стараемся не делать ничего лишнего
  221.             наша задача - сказать - все высокоприоритетные операции работают
  222.             не - все высокоприоритетные операции во всех контекстах работают
  223.             а именно так - все высокоприоритное - работает, можно тестировать глубже
  224.             т е - это первый быстрый фидбек
  225.         */
  226.  
  227.         switchFilter("All");
  228.         assertTasksAre("3");
  229.         /*
  230.             правильно, что вернулась на all фильтр
  231.  
  232.             единственное - уже тут стоило покрывать удаление таски
  233.  
  234.             если учесть все рекомендации выше - то перед переходом на all -
  235.             у нас останется единственная активная таска
  236.  
  237.             и опять мы получим хорошую ситуацию для проверки перехода на фильтр -
  238.             разные было-стало у списка тасок
  239.         */
  240.     }
  241.     ************************************************************
  242.  
  243.     ElementsCollection tasks = $$("#todo-list li");
  244. /*
  245.     селектор можно написать точнее "#todo-list>li"
  246.     в этом простом приложении - не критично
  247.  
  248.     могут быть ситуации - когда такая разница будет важной
  249. */
  250. ***************************************************************
  251.     private void assertNoActiveTasks() {
  252.         //tasks.filterBy(cssClass("active")).shouldBe(empty);
  253.         tasks.filterBy(cssClass("displayed:true")).shouldBe(empty);
  254.     }
  255. /*
  256.     ага, вот они - твои эксперименты - про как проверять
  257.  
  258.     чтоб выбрать видимые таски - точнее tasks.filterBy(visible)
  259.     если погрузиться в детали реализации - то при фильтрации tasks.filterBy(visible)
  260.     мы получим список элементов, свойство isDisplayed которых = true
  261. */
  262. ******************************************************
  263.     private void toggle(String taskText) {
  264.         tasks.findBy(exactText(taskText)).$(".toggle").click();
  265.     }
  266.  
  267.     private void activate(String taskText){
  268.         toggle(taskText);
  269.     }
  270. /*
  271.     попробуй вызвать метод activate для активной таски
  272.     разве ты выполнишь действие activate?
  273.  
  274.     почитай вот это
  275.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.tmkuktenqqdi
  276.     и прими окончательное решение по набору методов
  277. */
  278. ******************************************************
  279.     private void edit(String taskText, String editText){
  280. /*
  281.     реализация - ок
  282.  
  283.     названия параметров
  284.  
  285.     для обозачения было-стало часто применяют - old & new, from & to
  286.     для обозначения текста таски мы уже применяем taskText
  287.  
  288.     в итоге - получаем
  289.     oldTaskText & newTaskText
  290.     fromTaskText & ToTaskText
  291.  
  292.     т е - мы останемся в тех же терминах
  293. */
  294. ***********************************************************
  295.     private void switchFilter(String filterName){
  296.         $$("#filters a").findBy(exactText(filterName)).click();
  297.     }
  298. /*
  299.     Для упрощения - тут можно применить $(By.linkText(...))
  300.    
  301.     про набор методов - писала выше
  302. */    
  303. *****************************************
  304.     private void assertItemsLeft(Integer quantityTasks){
  305.         $("#todo-count").shouldHave(exactText(quantityTasks + " item left"));
  306.     }
  307. /*
  308.     не всегда в фразе будет фигурировать item left
  309.     внутри элемента "#todo-count" - есть элемент, содержищий именно цифру счетчика
  310.     достаточно проверить именно текст этого внутреннего элемента
  311.    
  312.     грамотно реализовала - параметр метода - это число
  313.     что естественно - мы же количество проверяем
  314. */
Advertisement
Add Comment
Please, Sign In to add comment