julia_v_iluhina

Untitled

Oct 20th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.70 KB | None | 0 0
  1.  public void prepareTasks(TaskStatus taskStatus, String... taskTexts) {
  2.         Task[] tasksList = getTasks(taskStatus, taskTexts);
  3.         prepareTasks(tasksList);
  4.  
  5.  }
  6.  /*
  7.     можно и в одну строчку
  8.     prepareTasks(getTasks(taskStatus, taskTexts));
  9.  
  10.     tasksList - для массива - не корректное название (т к это не список - это может путать)
  11.  
  12.     советую переписать  в одну строчку)
  13.  */
  14. ************************************
  15.  public static void prepareTasks(Task... tasks) {
  16.  
  17.          ...
  18.  
  19.          String queryToExecute = "localStorage.setItem('todos-troopjs','[";
  20.          /*
  21.             эту переменную можно уже после цикла объявить
  22.             а может и вообще обойдешься без нее)
  23.             посмотришь)
  24.          */
  25.          String taskItem = "";
  26.          /*
  27.             это - не используется
  28.          */
  29.  
  30.          ...
  31.              jsContent.add("{\"completed\":"
  32.                      + task.getTaskStatus().toString()
  33.                      /*
  34.                         можно просто task.getTaskStatus()
  35.                         и даже проще)
  36.                         task.taskStatus
  37.                         т к поля nested класса - доступны этому классу
  38.                         http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members
  39.                      */
  40.           ...
  41.          queryToExecute = queryToExecute + String.join(",", jsContent) + "]')";
  42.          /*
  43.             вот тут я и предлагаю объявить queryToExecute
  44.             а то и вовсе не объявлять
  45.             а просто  - передать такое выражение как параметр в executeJavaScript
  46.          */
  47.          System.out.println(queryToExecute);
  48.          /*
  49.             это уже можно убрать
  50.          */
  51.          Selenide.executeJavaScript(queryToExecute);
  52.          Selenide.refresh();
  53.          /*
  54.             используй import static
  55.             чтобы не указывать - Selenide
  56.             в обеих этих строчках
  57.          */
  58.      }
  59. *******************************
  60.      public class Task {
  61.              public GivenHelpers.TaskStatus taskStatus;
  62.              /*
  63.                 тут по идее - видим класс TaskStatus
  64.                 можно короче писать
  65.              */
  66.              private String taskText;
  67.              /*
  68.                 это уже придирка, конечно)
  69.                 не ясно - почему одно поле public,
  70.                 а второе - private
  71.  
  72.                 нам по большому счету - все равно
  73.                 просто сделай одинаково)
  74.              */
  75.  
  76.              ...
  77.  
  78.              public GivenHelpers.TaskStatus getTaskStatus() {
  79.                  return taskStatus;
  80.              }
  81.  
  82.              public void setTaskStatus(GivenHelpers.TaskStatus taskStatus) {
  83.                  this.taskStatus = taskStatus;
  84.              }
  85.  
  86.              public String getTaskText() {
  87.                  return taskText;
  88.              }
  89.  
  90.              public void setTaskText(String taskText) {
  91.                  this.taskText = taskText;
  92.              }
  93.              /*
  94.                 а вот во всех геттерах и сеттерах - теперь мы не нуждаемся
  95.                 внутри GivenHelpers мы и так поля класса Task видим
  96.  
  97.                 а в других местах - такого нам тоже не надо
  98.              */
  99.          }
  100. *******************************************************************************
  101. public class ToDoMVC extends GivenHelpers {
  102. /*
  103.     ойой)
  104.  
  105.     имя тест-класса - не по конвеншенсам)
  106.     смотри faq
  107.  
  108.     по поводу вот такого наследования
  109.  
  110.     наследование применено корректно - если можно сказать
  111.     потомок - это тоже предок
  112.     пробуем)
  113.     ToDoMVC - это тоже GivenHelpers
  114.     ерунда получается)
  115.  
  116.     GivenHelpers - это класс-контейнер полезных методов
  117.     объяви в GivenHelpers нужные тут методы статическими
  118.     (придется в связи с этим - еще кое-что статическим объявить -
  119.     то, что статические методы используют - IntelIJ Idea тебе подскажет)
  120.     и тут, в тест-классе - просто используй методы и классы из GivenHelpers
  121.     используй import static для всего нужного из GivenHelpers
  122.     и тут, в тест-классе - также сможешь писать
  123.     givenAtActive(TaskStatus.ACTIVE, "1", "2");
  124.     или даже
  125.     givenAtActive(ACTIVE, "1", "2");
  126.     если заимпортишь TaskStatus.ACTIVE
  127.  
  128.     и еще - поубирай с проекта те классы, что не используются
  129.     (BaseTest & At...Test -  раньше ты использовала их как предков для тест-класса
  130.     если не нужны - убирай лишнее)
  131.  
  132. */
  133. ***************************
  134.     public void givenAtAll(Task... tasks) {
  135.         prepareTasks(tasks);
  136.         filterAll();
  137.     }
  138. /*
  139.     а нужен тут filterAll()? )
  140.     посмотри на первіе строки в prepareTasks
  141.     они уже обеспечивают то - что мы на олле
  142.  
  143.     второго givenAtAll - тоже касается
  144. */
  145. *******************************
  146.     @Test
  147.     public void tasksLifeCycle() {
  148.         prepareTasks();
  149.         ...
  150.  
  151. /*
  152.     чтоб уже было единообразно - во всех тест-методах используй given-метод
  153. */
  154. *********************************
  155.     @Test
  156.     public void testEditAtAll() {
  157.         //given
  158.         /*
  159.             комментарий - уже мало полезен)
  160.             имя метода - уже говорит само за себя
  161.         */
  162.         givenAtAll(new Task(TaskStatus.ACTIVE, "1"));
  163.         /*
  164.             тут будет лаконичнее такой вызов
  165.             givenAtAll(ACTIVE, "1");
  166.  
  167.             фактически - тебе понадобится вариант с new Task(...)
  168.             только когда нужно для теста несколько тасок с разными статусами
  169.         */
  170. **********************************************
  171. /*
  172.  
  173.     дальше - иди по тест-плану
  174.     и реализуй с помощью фиче-тестов полное покрытие
  175.        
  176.     также важно реализовывать различные тестовые ситуации для теста одной фичи
  177.     например для действия ... над таской - у тебя реализовано 3 теста - для каждого из фильтров
  178.     на одном фильтре - поработай с единственной таской
  179.     на втором - со второй из списка
  180.     на третьем - с единственной видимой(есть еще и не видимые)
  181.    
  182.     получится - что мы учтем в тестах больше нюансов
  183.     проверим разные ситуации - т е лучшее покрытие реализуем
  184.    
  185.     Optimized full coverage
  186.     оптимизировать полное покрытие - не обязательно
  187.     но можно)
  188.     будешь оптимизировать - приложи линку с тест-планом - чтоб я понимала ход твоих мыслей
  189.     буду смотреть на покрытие и приоритеты
  190.     в чем оптимизация
  191.         - что покрыто в е2е - не покрываем фиче-тестами
  192.         - низкоприоритетное - покрываем единожды, на каком-то из контекстов (пример - delete by emptying text)
  193.         - низкоприоритетные варианты фичи, у которой есть покрытые варианты - не покрываем
  194.           (пример - reopen all & add)
  195.  
  196.  
  197. */
Advertisement
Add Comment
Please, Sign In to add comment