julia_v_iluhina

Untitled

Nov 24th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.73 KB | None | 0 0
  1. public class AtTodoMVCPageWithClearDataAfterEachTest extends BaseTest {
  2.  
  3.     @Before
  4.     public void openPage(){
  5.         open("https://todomvc4tasj.herokuapp.com/");
  6.     }
  7.  
  8. }
  9.  
  10. /*
  11.     уже во всех тест-методах = используешь гивен-метод
  12.     встрой открытие урла в гивен-метод
  13.  
  14.     и окончательно избавься от этого класса
  15.  
  16.     причем - не просто перенеси открытие урла
  17.     а вот так - если текущий урл не равен такому-то урлу
  18.     то открыть этот урл
  19.     цель = чтоб открывался урл только в случае необходимости
  20.     тут можно сэкономить - на открытиях урла
  21. */
  22. *******************************
  23. public enum TaskStatus {
  24.     ACTIVE,
  25.     COMPLETED;
  26.  
  27.     @Override
  28.     public String toString(){
  29.         switch(this) {
  30.             case ACTIVE: return "false";
  31.             case COMPLETED: return "true";
  32.             default: throw new IllegalArgumentException();
  33.         }
  34.     }
  35. }
  36. /*
  37.     недостаток этого решения - наличие логики в toString()
  38.     лучше бы тут был код попроще
  39.     и оперировал уже какой-то данностью, а не что-то анализировал
  40.  
  41.     приведу тебе пример - как можно было бы реализовать
  42. */
  43.  
  44. public enum Day {
  45.         MONDAY("понедельник"),
  46.         TUESDAY("вторник"),
  47.         WEDNESDAY("среда"),
  48.         THURSDAY("четверг"),//<<----------------------для каждого значения enum - вызов конструктора, фактически значение = объект класса
  49.         FRIDAY("пятница"),
  50.         SATURDAY("суббота"),
  51.         SUNDAY("воскресенье");
  52.  
  53.         String description;//<<---------------------------поле для хранения описания дня недели
  54.  
  55.         public Day(String description) {
  56.                 this.description = description;//<<---------------------------логика конструктора - запомнить для объекта его описание
  57.         }
  58.  
  59.         @Override
  60.         public String toString() {
  61.             return description;//<<---------------------------логика - вывести для объекта - то что для него заполнили
  62.         }
  63. }
  64. /*
  65.     В такой реализации - в toString() - уже нету анализа
  66.     еще на этапе вызова конструктора для каждого из членов enum - мы задали текстовое предстваление
  67. */
  68. ***********************************************
  69. /*
  70.     Нету смысла реализовывать enum TaskStatus и class Task - как классы в отдельных java-файлах
  71.     эти классы - нужны только в комплексе с гивен-методами и отдельно от них - не применются
  72.     да и реализация этих классов - не сложная
  73.     Можно эти классы объявить пока - в тест-классе
  74.     Важно - что они будут рядом с гивен-методами
  75.  
  76.     чуть дальше - мы разберем - как вынести все вспомогательные методы из тест-класса
  77.     вот как раз вместе с гивен-методами и enum TaskStatus и class Task
  78.     тоже переместятся
  79.  
  80.     получим - не перегруженный деталями тест-класс
  81.     и отдельный класс со вспомогательными методами и классами
  82.     но это - уже в следующей работе
  83.  
  84.     пока можно enum TaskStatus и class Task разместить в тест-классе, как и гивен-методы
  85.  
  86.      почитай про nested classes in java
  87.         https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
  88.         https://www.tutorialspoint.com/java/java_innerclasses.htm
  89.  
  90.  
  91.      http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members
  92.      
  93.     можно пока это отложить
  94.     чтоб и без того загроможденный тест-класс еще больше не загромождать
  95.     но в следующей работе - как будешь выосить служебные методы из тест-класса - про это надо не забыть
  96.  
  97. */
  98.  
  99. **************************************
  100.     @Step
  101.     private void given(Task[]... tasks){
  102.     /*
  103.         Task... tasks - это несколько объектов типа Task
  104.         Task[]... tasks - это несколько объектов типа Task[] = массив тасок
  105.         вопрос - нам нужно передавать несколько тасок или несколько массивов тасок?
  106.     */
  107.         ...
  108.         for(Task[] task: tasks) {
  109.             for (int i = 0; i < task.length; i++) {
  110.         /*
  111.             соответственно - не понадобится вложенных циклов, раз нам не нужно оперировать
  112.             несколькими массивами тасок
  113.         */
  114. /*
  115.     что до использования  private Task[] aTask(TaskStatus taskStatus, String... taskTitles)
  116.     для подготовки значений для вызова given(Task[]... tasks)
  117.  
  118.     если ты вызываешь метод given(Task[]... tasks) -
  119.     то фактически - ты передаешь один параметр типа Task[] (а могла бы - несколько)
  120.  
  121.     если ты вызываешь метод given(Task... tasks) -
  122.     то фактически - ты передаешь значение типа Task[] - как вот эти несколько Task... tasks
  123.  
  124.     http://www.java-tips.org/java-se-tips-100019/24-java-lang/481-using-the-varargs-language-feature.html
  125.     At compile time a vararg is converted to an array.
  126.  
  127. */
  128. *************************************
  129.     @Test
  130.     public void testConfirmEditAtActive(){
  131.         givenAtActive(aTask(ACTIVE, "task1"));
  132.  
  133.         confirmEdit("task1", "task1 edited");
  134.         assertVisibleTasks("task1 edited");
  135.         assertItemLeft(1);
  136.     }
  137.  
  138.     @Test
  139.     public void testConfirmEditAtCompleted(){
  140.         givenAtCompleted(aTask(COMPLETED, "task1"));
  141.  
  142.         confirmEdit("task1", "task1 edited");
  143.         assertVisibleTasks("task1 edited");
  144.         assertItemLeft(0);
  145.     }
  146. /*
  147.     тестируемые ситуации - очень похожи = единственная таска в списке
  148.  
  149.     можно в одном из случаев - оперировать единственной видимой таской, при существовании еще и не видимой, к примеру
  150.  
  151.     пройдись по фиче-тестам - сравни тестовые ситуации
  152.     постарайся одну и ту же фичу на разных контекстах тестировать используя разные тестовые ситуации
  153.  
  154.     с удалением  - тоже похоже, ситуации нужно разнообразить
  155.  
  156.     просмотри все тест-методы на этот предмет
  157. */
  158. *****************************
  159.     public void testSwitchToAllAtActive(){
  160.         givenAtAll(aTask(ACTIVE, "task1"), aTask(COMPLETED, "task2"));
  161.  
  162.         filterAll();
  163.         assertVisibleTasks("task1", "task2");
  164.         assertItemLeft(1);
  165.     }
  166.     /*
  167.         посмотри на реализацию и на то, что обещали в имени метода
  168.         мы то делаем, что планировали?
  169.     */
  170. ******************
  171.     @Test
  172.     public void testSwitchToActiveAtCompleted(){
  173.     /*
  174.         еще по фильтерингу - есть вот такой метод
  175.         в тест-плане - запланировано 3 фиче-теста
  176.  
  177.         и еще - покрытие  е2е отразено немного не верно
  178.  
  179.         посмотри комментарии в тест-плане
  180.         откорректируй тест-план
  181.         допокрой - что не хватает
  182.  
  183.         проверь чтоб тестовые ситуации были разные
  184.  
  185.     */
Advertisement
Add Comment
Please, Sign In to add comment