julia_v_iluhina

Untitled

Oct 30th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.40 KB | None | 0 0
  1.     @Test
  2.     public void taskWorkFlow() {
  3.  
  4.         given(new Task("a", ACTIVE));
  5.         assertTasksAre("a");
  6. /*
  7.     в принципе - можно и так
  8.     но тогда не нужна проверка после вызова гивен-метода
  9.     мы об этом говорили в прошлых заданиях
  10.     еще раз приведу этот кусочек ниже
  11.  
  12.     возвращайся к тест-плану своему
  13.     и заново размечай - что где покрыто
  14.     тут, в е2е, на all фильтре мы add - не покрыли
  15.     это учти - когда будешь покрытие в тест-плане отмечать
  16.  
  17.     а это надо делать - чтобы разобраться
  18.     для чего нужно писать фиче-тесты
  19. */
  20. /*
  21.  
  22.     Есть разные способы выполнять предварительные действия
  23.     Мы сейчас делаем это через действия на UI (User Interface)
  24.     А есть еще методы - работать непосредственно с данными (далее вы такое тоже попробуете)
  25.     Так вот через действия на UI - предварительные действия не быстрые и часто не достаточно надежные
  26.     А через непосредственную работу с данными - предварительные действия быстрые и надежные
  27.  
  28.     Если предварительные действия медленные или не надежные
  29.     То проверка в конце предварительных действий нужна
  30.  
  31.     А если мы уверены - что после предварительных действий гарантировано все ОК,
  32.     то и проверок не надо после предварительных действий
  33.  
  34.     Но, поскольку наше приложение - простое
  35.     Разумно не делать проверку в конце предварительных действий
  36.     чтобы наши тесты были эффективнее
  37.  
  38.     Тестировали бы что-то типа соцсети и если бы предварительные действия были
  39.     реализованы через UI - да, после предварительных действий было бы разумно
  40.     выполнить проверку (проверка после предварительных действий нам позволяет отличить -
  41.     ошибка возникла на этапе выполнения тестируемого действия, или все же раньше)
  42.  
  43.  
  44. */
  45. *********************************
  46. public void editTaskActiveFilter() {
  47. public void deleteTaskAllFilter() {
  48. public void editCancelTaskAllFilter() {
  49. /*
  50.     и в этих тест-методах - используй гивен-метод
  51.  
  52.     вообще - во всех тест-методах
  53.     их будем использовать
  54. */
  55. *************************
  56. /*
  57.     мы наследуем тест-класс от AtTodoMvcPageWithClearedDataAfterEachTest
  58.  
  59.     перед запуском теста - открываем наше приложение
  60.     после - чистим локалсторидж (раньше чистили, ты сейчас это закомментарил,
  61.     кстати, при запуске всех тестов сейчас могут быть проблемы)
  62.  
  63.     гивены можно вызывать и для варианта, когда надо задать пустой список тасок
  64.     значит - можно вызывать в каждом тест-методе гивен-метод
  65.     и обойтись без очистки локал сториджа после теста - вот уже облегчили код
  66.  
  67.     дальше - раз все тесты происхолят после открытия одного и того же урла
  68.  
  69.     можно вначале гивен-метода проверить
  70.     если сейчас урл не такой, то открыть нужный урл
  71.  
  72.     этот кусочек кода можно оформить в виде метода,
  73.     который будет вызываться вначле гивен-метода
  74.     такого плана методы = если сейчас не так, то сделать так
  75.     часто называют, начиная со слова ensure = обеспечить
  76.  
  77.     вот и не нужен нам код - по открытию урла в бифор-методе
  78.     сразу вопрос - какой предок нужен тест-классу)
  79.  
  80.     вот тебе и еще одна оптимизация)
  81.     кода меньше
  82.     сущностей меньше
  83.     действий лишних меньше
  84. */
  85. ***********************
  86.  @Test
  87.     public void editTaskActiveFilter() {
  88.         add("a");
  89.         filterActive();
  90. /*
  91.     как переписать эти подготовительные действия с помощью гивен-метода
  92.     given(new Task("a", ACTIVE));
  93.     filterActive();
  94.  
  95.     на самом деле, и filterActive(); - тоже предварительное действие
  96.     и тест-методов - у нас будет много
  97.     мы же реализуем полное покрытие
  98.  
  99.     потому - есть цель получить лаконично организованные предварительные действия
  100.     у тебя уже есть
  101.     given(Task... tasks)
  102.  
  103.     а если реализовать гивен-методы для разных фильтров
  104.  
  105.     givenAtActive(Task... tasks)
  106.     givenAtCompleted(Task... tasks)
  107.  
  108.     то и
  109.     вместо предварительных действий
  110.     add("a");
  111.     filterActive();
  112.  
  113.     будешь вызывать
  114.     givenAtActive(new Task("a", ACTIVE));
  115.  
  116.     в реализации этих новых методов - используй вызов метода given(Task... tasks)
  117.     так код в гивен-методах - будет DRY
  118.     т к мы не будем повторять ту же логику
  119. */
  120. ************************************
  121. /*
  122.     поговорим про покрытие
  123.     реализуем - полное покрытие
  124.  
  125.     дополняем е2е тест фиче-тестами
  126.     до полного покрытия
  127.  
  128.     можно не оптимизировать и просто покрыть все фичи
  129.     на всех фильтрах
  130.  
  131.     а можно - реализовать optimized full coverage
  132.     в чем оптимизация
  133.         - что покрыто в е2е - не покрываем фиче-тестами
  134.         - низкоприоритетное  - покрываем единожды, на каком-то из контекстов (пример - delete by emptying text)
  135.         - низкоприоритетные варианты фичи, у которой есть покрытые варианты - не покрываем (пример - reopen all & add)
  136.  
  137.     оптимизировать или нет - сам решай
  138.  
  139.     в любом случае - приведи тест-план с указанным покрытием
  140.  
  141.     будут ситуации, когда для одной фичи - 2 или 3 теста
  142.     используй разные тестовые ситуации в таких тестах
  143.  
  144.     например
  145.             работаем с единственной таской
  146.             работаем со второй таской
  147.             работаем с таской, которая единственная видимая, но есть еще и не видимые
  148.  
  149.     это обязательно надо сделать - т к это существенно улучшит покрытие
  150.     так мы учтем много разнообразных моментов
  151.  
  152. */
  153. ********************************
  154. /*
  155.     будут тесты
  156.     в которых будет необходимость в нескольких тасках с одинаковым статусом
  157.  
  158.     мы уже можем написать
  159.     given(new Task("a", ACTIVE), new Task("b", ACTIVE));
  160.     а вот второй вариант - более лаконичный
  161.     given(ACTIVE, "a", "b");
  162.  
  163.         задача - реализовать еще 3 гивен-метода
  164.         given(TaskStatus taskStatus, String... taskTexts)
  165.         givenAtActive(TaskStatus taskStatus, String... taskTexts)
  166.         givenAtCompleted(TaskStatus taskStatus, String... taskTexts)
  167.  
  168.  
  169.         внутри таких методов
  170.         надо сделать то же, что ты делал в given(Task... tasks)
  171.         просто - не ясно
  172.         как из параметров (TaskStatus taskStatus, String... taskTexts)
  173.         получить (Task... tasks)
  174.  
  175.         вот решим эту задачу - сможешь внутри
  176.         given....(TaskStatus taskStatus, String... taskTexts)
  177.         написать код в одну строчку
  178.         given(xxx(taskStatus, taskTexts))
  179.  
  180.         в given(Task...tasks) в качестве параметра можно передавать массив Task[] tasks
  181.         погугли про varargs in java
  182.         http://www.linkex.ru/java/varargs.php
  183.  
  184.         реализуй метод xxx
  185.         возвращающий Task[]
  186.         с параметрами (TaskStatus taskStatus, String... taskTexts)
  187.  
  188.         в котором
  189.         объяви переменную типа Task[] и инициализируй ее как массив Task[....такого-то размера....]
  190.         какого - посмотри на параметры нашего метода
  191.  
  192.         в цикле обойди taskTexts
  193.         и каждый элемент массива заполни с помощью метода aTask
  194.  
  195.         верни полученный массив
  196.  
  197.         а далее - используй этот метод
  198.         внутри given...(TaskStatus taskStatus, String... taskTexts)
  199.             given(xxx(taskStatus, taskTexts))
  200.  
  201.         Если тяжело сразу  xxx реализовать -
  202.         то для начала просто внутри givenAt....
  203.         реализуй этот код - собери массив Task[] по переданным параметрам
  204.  
  205.         И тогда будет что-то типа такого
  206.               Task[] tasks = ....
  207.               ....
  208.               ....
  209.               ....
  210.               given(tasks)
  211. */
  212. ************************
  213. /*
  214.     в следующей версии - реализуй фиче-тесты для полного покрытия
  215.     и используй все гивен-методы
  216.     цель - тест-методы держать в лаконичном наглядном состоянии
  217.  
  218.     не забудь привести к следующему ревью - и тест-план
  219. */
Advertisement
Add Comment
Please, Sign In to add comment