julia_v_iluhina

Untitled

Oct 24th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.35 KB | None | 0 0
  1. см комментарии к тест-плану
  2. ***************************************************
  3. public class Preconditions {
  4.  
  5.     ...
  6.     private final List<String> taskStatus;
  7.     /*
  8.         taskStatuses
  9.  
  10.         насчет использования String - спорно
  11.         но - т к это все внутри билдера, то в общем-то - приемлемо
  12.     */
  13. *****************************************
  14.         public PreconditionBuilder atAllFilter() {
  15.  
  16.             this.filter = "https://todomvc4tasj.herokuapp.com/#";
  17.             return this;
  18.         }
  19.  
  20.         public PreconditionBuilder atActiveFilter() {
  21.  
  22.             this.filter = "https://todomvc4tasj.herokuapp.com/#/active";
  23.             return this;
  24.         }
  25.  
  26.         public PreconditionBuilder atCompletedFilter() {
  27.  
  28.             this.filter = "https://todomvc4tasj.herokuapp.com/#/completed";
  29.             return this;
  30.         }
  31.  
  32.         public Preconditions build() {
  33.  
  34.             if (!url().equals("https://todomvc4tasj.herokuapp.com/")) {
  35.                 open("https://todomvc4tasj.herokuapp.com/");
  36.             }
  37.             ...
  38.             open(this.filter);
  39. /*
  40.     https://todomvc4tasj.herokuapp.com/ - строка повторяется многократно
  41.     и в разных методах
  42.     вынеси в отдельную переменную и используй
  43.  
  44.     теперь про код
  45.     сначала - прийти на https://todomvc4tasj.herokuapp.com/
  46.     потом - наполнить локалсторидж
  47.     потом - переоткрыть урл согласно фильтра
  48.  
  49.     вопрос - раз мы не используем клики по линкам для переходов по фильтрам
  50.     почему не сразу открывать урл согласно фильтра
  51.     правда, могут быть сложности - Яков на видео говорил про это немного
  52.     ты попробуй переделать более оптимально открытия урлов
  53.     будут сложности - давай обсудим
  54.  
  55.     учти вариант вызова given().build() - чтоб тоже корректно работал
  56. */
  57. ****************************************
  58.     public Preconditions build() {
  59.  
  60.           ...
  61.           //делаем все действия
  62.           ...
  63.  
  64.           return new Preconditions(this);
  65.           //именно это мы строим
  66.         }
  67.     }
  68. /*
  69.     чтобы четче выдержать паттерн - лучше, чтобы
  70.     вот эти все действия - выполнял сам объект Preconditions
  71.  
  72.     т е - в методе build() - свести к коду
  73.     вместо
  74.         делаем действия
  75.         return new Preconditions(this)
  76.     реализуем
  77.         тут - только return new Preconditions(this)
  78.     а в Preconditions - делаем метод prepare()
  79.         который как раз и выполнит эти действия
  80.  
  81.     тогда - мы четко выдержим паттерн
  82.  
  83.     получаем варианты вызовов
  84.     given().build().prepare();
  85.     given().activeTasks(...).completedTasks(...).atAllFilter().build().prepare();
  86.  
  87.     вот эти build().prepare() - многословно, конечно
  88.         можно немного доработать)
  89.         в рамках PreconditionBuilder - создать метод void prepare()
  90.         который вызывает как раз build().prepare()
  91.  
  92.  
  93.     и получим чуть попроще
  94.     given().prepare();
  95.     given().activeTasks(...).completedTasks(...).atAllFilter().prepare();
  96.  
  97.     и в то же время - реализованная структура позволит вот так сделать
  98.         Preconditions preconditions = given().activeTasks(...).completedTasks(...).atAllFilter().build();
  99.  
  100.         и потом - использовать это несколько раз
  101.             preconditions.prepare();
  102.  
  103.         конечно, нам в данном случае такой вариант не нужен
  104.         т к в разных фиче-тестах нам нужны разные ситуации
  105.         но - паттерн это позволяет и наша реализация четкая для такого паттерна
  106.         тоже это обеспечит
  107.  
  108.  
  109.     т е построенный объект и его действия - все же разделены
  110.  
  111.     теперь про термины
  112.         preconditions и givens - синонимы
  113.         надо бы использовать один термин)
  114.         я и про имена методов, и про имена классов
  115.  
  116. */
  117. *********************************
  118. http://joxi.ru/52akqzoUGPPkvr
  119. http://joxi.ru/BA0p30gsBLLpDA
  120. http://joxi.ru/DmBNWL6FNEEgJm
  121. /*
  122.     1 - форматирование отличается от стандартного
  123.     2 - используешь пропуски строк по-разному
  124.     несколько пропущенных строк - уже лишнее
  125.     достаточно одной пропущенной строки - чтобы код отформатировать
  126.  
  127.     чтобы реформатировать код - выдели код + code->reformat code
  128.  
  129.     про применение пропусков строк
  130.     https://google.github.io/styleguide/javaguide.html#s4.6.1-vertical-whitespace
  131. */
  132. **************************************
  133. http://joxi.ru/vAW36KgskJJBoA
  134. /*
  135.     не надо отдельного пекеджа test
  136.  
  137.     уже мы в ветке src/test/java/com/todomvc
  138.  
  139.     перенеси тест-классы на уровень выше
  140. */
  141. ****************************************
  142.     @Test
  143.     public void testCreate(){
  144.  
  145.         given().atActiveFilter().build();
  146.  
  147.         page.create("a");
  148.         page.assertVisibleTasks("a");
  149.         page.assertItemsLeft(1);
  150.     }
  151.     @Test
  152.     public void testCreate(){
  153.  
  154.         given().atAllFilter().build();
  155.  
  156.         page.create("a");
  157.         page.assertTasks("a");
  158.         page.assertItemsLeft(1);
  159.     }
  160. /*
  161.     для тест-методов одного действия - применяй разные тестовые ситуации
  162.     например, тут - в одном случае - добавляем первую таску
  163.     а во втором - вторую
  164.  
  165.     не стоило вообще убирать е2е тест
  166.     е2е тест дает нам фидбек про то, как действия комбинируются друг с другом,
  167.     можно ли их использовать одно за другим
  168.     это важно тоже проверить
  169.  
  170.     Верни в проект - е2е тест
  171.     в рамках этого задания - можно покрытие не оптимизировать
  172.     а можно и оптимизировать
  173.     сам решай
  174.  
  175.     в чем оптимизация
  176.         - что покрыто в е2е - не покрываем фиче-тестами
  177.         - низкоприоритетное - покрываем единожды, на каком-то из контекстов (пример - delete by emptying text)
  178.         - низкоприоритетные варианты фичи, у которой есть покрытые варианты - не покрываем (пример - reopen all & add)
  179.     ты многие идеи уже применил
  180.     единственное - что нужно бы вернуть е2е
  181.     его можно сделать проще (я бы не стала на это тратить время тут)
  182.     но вообще убрать - не стоит
  183. */
  184. ************************************************
  185.     @Test
  186.     public void testEdit(){
  187.         given().activeTasks("a").atActiveFilter().build();
  188.  
  189.     ...
  190.     @Test
  191.     public void testEdit(){
  192.         given().activeTasks("a").atAllFilter().build();
  193. /*
  194.     и тут, и далее - позаботься о разных тестовых ситуациях
  195.     уже про это не пишу далее
  196. */
  197. *****************************************
  198.     @Test
  199.     public void testDelete(){
  200.  
  201.         given().activeTasks("a", "active to delete").completedTasks("b", "completed to delete").atAllFilter().build();
  202.  
  203.         page.delete("active to delete");
  204.         page.delete("completed to delete");
  205.         page.assertTasks("a", "b");
  206.         page.assertItemsLeft(1);
  207.     }
  208. /*
  209.     в фиче-тесте - покрывай одно действие
  210.  
  211.     когда покрываем несколько действий - это уже е2е получается
  212.  
  213.     а для е2е - проверок поболее нужно
  214.  
  215.     на all фильтре в при удалении - поработай с закомпличеной таской
  216.     а при редактировании - с активной
  217.  
  218.     так покроешь и это - работа на all фильтре с тасками в разных статусах
  219.  
  220.     все равно всех комбинаций - не переберешь даже для нашего примитивного приложения
  221.     что уж говорить про более сложные
  222.  
  223.     а вот такой тест - когда мы покрываем несколько действий к ряду без проверок
  224.     будет мало эффективным - слишком много чего делаем
  225.     и мало точным - если тест упал на проверке - неизвестно - какое действие привело к этому
  226.  
  227.     уже немного было про pair wise testing в каком-то из видео)
  228.     http://qcthoughtsaloud.blogspot.com/2010/06/pairwise-testing.html
  229. */
  230. **************************************
  231.  
  232.     public void testMoveToAll(){
  233.     public void testMoveToCompleted(){
  234. /*
  235.     точнее было бы testSwitchTo...
  236.  
  237.     это про имя
  238.  
  239.     и про реализацию
  240.     советую использовать в каждом из тестов как активные, так и закомпличеные таски
  241.  
  242.     так мы проверим
  243.     и как отображаются активные
  244.     и как отображаются закомпличеные таски
  245.     после перехода на такой-то фильтр
  246.  
  247.     т к нам нужны еще и разные тестовые ситуации
  248.     можно учесть
  249.         по одной таске в разном статусе
  250.         по парочке тасок в разном статусе
  251.         таски в разном статусе вперемешку (одна такая, вторая не такая, третья - опять такая....)
  252. */
  253. ******************************
  254.     @Test
  255.     public void testConfirmEditClickOutside(){
  256.  
  257.         given().activeTasks("a").atActiveFilter().build();
  258.  
  259.         page.startEdit("a", "a edited");
  260.         $("#header").click();
  261. /*
  262.     ну да
  263.     можно кликнуть и на $("#header")
  264.     а можно и на чем-то, чем мы уже пользуемся - чтоб меньшее количество селекторов использовать
  265.     нам еще нужно - чтоб при клике на элементе - ничего кроме смены фокуса не происходило
  266.  
  267.     нам подойдет для этих целей $("#new-todo")
  268.  
  269.     и поскольку мы это собираемся применять в нескольких местах
  270.     используй для этого переменную (тоже в пейдже объяви и инициализируй)
  271.  
  272.     и для этой переменной, и для переменной для списка тасок - используй модификатор доступа public
  273.     вполне возможно - что это тоже пригодится - не только внутри методов пейджа
  274.     а и в тест-методах
  275. */
Advertisement
Add Comment
Please, Sign In to add comment