julia_v_iluhina

Untitled

Dec 3rd, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.76 KB | None | 0 0
  1. givenAtActive(aTask(ACTIVE, "1"));
  2. или
  3. givenAtActive(ACTIVE, "1");
  4. /*
  5.     раз у нас такой набор гивен-методов - лучше использовать самый лаконичный вариант
  6.  
  7.     просмотри все вызовы гивен-методов
  8.     еще есть такие моменты
  9. */
  10. *************************
  11.     @Test
  12.     public void testAddOnActive() {
  13.         givenAtActive(aTask(ACTIVE, "1"));
  14.  
  15.         add("2");
  16.         assertTasksAre("1", "2");
  17.     }
  18. /*
  19.     Если это технически возможно - покрывай и assertItemsLeft(0);
  20.     и проверки уточнишь, и покрытие улучшишь - нам в рамках full coverage полезно проверить работу этого счетчика
  21.     при разных комбинациях - ситуаций + контекстов + выполненного последнего действия
  22.  
  23.     Да и не очень это усложнит тест-метод (я говорю о фиче-тестах)
  24.  
  25.     Подозреваю - что ты петалась и это соптимизировать
  26.     Я бы не стала
  27.  
  28.     все же это и уточнение
  29.     да и потом - когда тесты будут дорабатываться - следить за этим будет муторно
  30.     проще покрыть - много дополнительных ресурсов это не сожрет
  31.  
  32.     касается и других тестов
  33. */
  34. **************************************
  35.     @Test
  36.     public void testCompleteAllOnActive() {
  37.         givenAtActive(aTask(ACTIVE, "1"), aTask(ACTIVE, "2"));
  38.  
  39.         //complete all
  40.         toggleAll();
  41.         assertNoTasks();
  42.         filterAll();
  43.         assertTasksAre("1", "2");
  44.     }
  45. /*
  46.     тут уже комментировать //complete all - стоит ли
  47.     в общем-то ясно - что тестим  - из имени метода
  48.  
  49.     что касается перехода на filterAll();
  50.     я бы в рамках этого теста - после toggleAll();
  51.     проверила список тасок + Items Left
  52.  
  53.     и отдельно - в отдельных фиче-тестах
  54.     проверяла фильтеринг
  55.         дано - таски в разных статусах на нужном нам фильтре
  56.         действие - переход на нужный фильтр
  57.         проверки - список тасок + Items Left
  58.  
  59.     и если мы будем рассматривать тесты в комплексе - то все ок проверено будет
  60.     причем - независимым способом
  61.     это важно - если будут проблемы с toggleAll(); - ты все равно проверишь фильтеринг, к примеру
  62.  
  63.     у нас уже есть один е2е
  64.     и там мы проверяем  - как операции могут работать в рамках одного сценария
  65.     т е - интеграционный тест уже есть
  66.  
  67.     а вот этот testCompleteAllOnActive() - получился таким маленьким е2е-ом
  68.     иногда конечно другого выхода нету (тут - не тот случай, но так бывает)
  69.     тогда ок - так реализуй
  70.     но - в названии метода отражай - что покрыто
  71.  
  72.     дальше (конечно, по возможности)
  73.     стоит дополнять покрытие фиче-тестами (их еще атомарными тестами называют при случае)
  74. */
  75. *************
  76.   public void testReopenOnCompleted() {
  77. /*
  78.     покрытие ты оптимизируешь
  79.     потому - не стоит покрывать в фиче-тесте то
  80.     что покрыто в е2е
  81. */
  82. ***********************
  83.     @Test
  84.     public void testClearCompletedOnCompleted() {
  85.         givenAtCompleted(aTask(ACTIVE, "1"), aTask(COMPLETED, "2"));
  86.  
  87.         assertTasksAre("2");
  88.  
  89.         clearCompleted();
  90.         assertNoTasks();
  91.         assertItemsLeft(1);
  92.     }
  93. /*
  94.     придерживайся одного принципа
  95.     мы не делали проверок после гивен-методов в других тест-методах
  96.     и тут не будем
  97.  
  98.     да и не надо - если посмотреть на все разработанные фиче-тесты в комплексе
  99.     и если вспомнить  про то - если гивен-методы надежны - то не нужно проверок после них
  100. */
  101. ********************************
  102.    @Test
  103.     public void testDeleteOnAll() {
  104.         given(ACTIVE, "1", "2", "3");
  105.  
  106.         delete("2");
  107.         assertTasksAre("1", "3");
  108.         assertItemsLeft(2);
  109.     }
  110.  
  111.     @Test
  112.     public void testDeleteOnActive() {
  113.         givenAtActive(aTask(ACTIVE, "1"), aTask(ACTIVE, "2"));
  114.  
  115.         delete("1");
  116.         assertTasksAre("2");
  117.     }
  118. /*
  119.     По сути - это одна тестовая ситуация
  120.     у нас несколько тасок, все видимы
  121.     и мы удаляем какую-то из них
  122.     не совсем одна, конечно - ты работаешь с первой илине первой таской
  123.  
  124.     можно усугубить)
  125.     я бы для Active - использовала ситуацию, когда есть одна видимая таска, и одна не видимая
  126. */
  127. ********************************
  128. /*
  129.     посмотри на комменты в тест-плане - надо бы дополнить покрытие
  130. */
  131. **********************************
  132. private static ElementsCollection tasks = $$("#todo-list>li");
  133. /*
  134.     особого смысла объявлять переменную как static - нету
  135.  
  136.     как доступиться к этой коллекции из гивен-метода - поясню
  137.  
  138.     а больше и нет причин или целей)
  139.  
  140.     про разницу между статик и не статик - уже давала линку
  141.      http://www.javamadesoeasy.com/2015/06/differences-between-instance.html
  142. */
  143. private void given(Task... tasks) {
  144.  
  145.         String jsCode;
  146.         /*
  147.             предлагаю объявить переменную попозже)
  148.         */
  149.  
  150.         if .....
  151.         /*
  152.             этот if - я бы завернула ensurePageOpened() / ensureAppOpened()
  153.             и тут бы вызывала этот метод
  154.  
  155.             часто имена методов начинают с ensure - когда нужно что-то обеспечить =
  156.             если нету ... то сделать это
  157.         */
  158.  
  159.         ...
  160.  
  161.         for (int i = 0; i < tasks.length; i++) {
  162.         ....
  163.         /*
  164.             получилось бы чуть лаконичнее - если использовать
  165.             for(Task task:tasks)
  166.         */
  167.  
  168.         jsCode = String.join(",", jsContent);
  169.         jsCode = "....".concat(jsCode).concat("....");
  170.         /*
  171.             я бы  вместо объявления переменной и вот этих 2-ух строк
  172.  
  173.             вот так написала бы - в одну строку
  174.             String jsCode = "....".concat(String.join(",", jsContent)).concat("....");
  175.             или даже
  176.             String jsCode = "...." + String.join(",", jsContent)) + "....";
  177.             просто потому что читать легче
  178.  
  179.             мы конечно немного потеряем в скорости используя + вместо concat
  180.             вот тут было про это
  181.             http://stackoverflow.com/questions/47605/string-concatenation-concat-vs-operator
  182.  
  183.             ну то уже вкусовщина)
  184.             я бы предпочла ясность и лаконичность кода)
  185.         */
  186.  
  187.         ....
  188.         TodoMVCTest.tasks.shouldHaveSize(tasks.length);
  189.         /*
  190.             раз коллекция tasks = $$("#todo-list>li") - не статик
  191.             то тут ее можно получить как this.tasks
  192.  
  193.             https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
  194.             http://stackoverflow.com/questions/2411270/when-should-i-use-this-in-a-class
  195.         */
  196.     }
  197. *****************************************
  198.     private Task[] applyStateForTasks(TaskState taskState, String... taskTexts){
  199.  /*
  200.     этот метод я бы по аналогии с aTask - назвала бы aTasks, или даже также aTask
  201.     (если сигнатуры у методов разные - то можно методы с одни и тем же именем создавать в java)
  202.  
  203.     и тогда вызовы givenAt....(aTasks(ACTIVE, "a", "b", "c")) - тоже достаточно лаконично )
  204.     т к - я смотрю - не для всех фильтров ты реализовала given-метод с параметрами (TaskState taskState, String... taskTexts)
  205.  
  206.     тут уже - или такие методы дореализовать
  207.     или этот убирай
  208.     и потом будешь вызывать givenAt....(aTasks(ACTIVE, "a", "b", "c")) при необходимости
  209.  
  210.     а то не понятно
  211.     почему гивен-методы с параметрами (Task... tasks) - для каждого фильтра
  212.     а с параметрами - (TaskState taskState, String... taskTexts) - только для all
  213.  
  214.  */
  215. ****************************************
  216.  private static class Task {
  217.    ....
  218.         public Task(TaskState value, String name) {
  219.         /*
  220.             более общепринято - имя параметра конструктора и имя поля класса называть одинаково
  221.             value - замени на state
  222.  
  223.             name - я бы поменяла на text (и имя параметра, и имя поля
  224.             причина - мі везде в тестах єто называем текстом таски
  225.             ну или если хочется быть точнее - то title - как это на уровне локалсториджа называется
  226.         */
  227.  
  228.         @Override
  229.         public String toString(){
  230.             StringBuilder task = new StringBuilder("{\\\"completed\\\":");
  231.             return task.append(state.value).append(", \\\"title\\\":\\\"").append(name).append("\\\"}").toString();
  232.             /*
  233.                 тут бы я тоже написала лаконичнее
  234.                 return new StringBuilder("{\\\"completed\\\":").append(state.value).append(", \\\"title\\\":\\\"").append(name).append("\\\"}").toString();
  235.                
  236.                 или все же  - для лакничности используя + для конкатенации                
  237.                 return "{\\\"completed\\\":" + state.value + ", \\\"title\\\":\\\"" + name + "\\\"}";
  238.                 (напоминаю - вот это  - уже моя вкусовщина)
  239.                
  240.                 а в одну строку переписать стоит
  241.                 когда объявление переменной не дает тебе каких-то выигрышей в понятности-наглядности
  242.                 так и не надо ее объявлять )
  243.             */
  244.         }
  245.  
  246.     }
Advertisement
Add Comment
Please, Sign In to add comment