julia_v_iluhina

Untitled

Aug 1st, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.89 KB | None | 0 0
  1. public class ToDoMVCTest {
  2.  
  3.     ElementsCollection task = $$("#todo-list li");
  4.     /*
  5.         будь точнее
  6.         это  - список тасОК, а не одна таска
  7.         так что - tasks
  8.     */
  9.  
  10.     @Test
  11.     public void basicTasksLifeCycle(){
  12.  
  13.         open("http://todomvc.com/examples/angularjs/#/");
  14.         /*
  15.             вообще в задании говорилось - использовать для теста вот это приложение)
  16.              https://todomvc4tasj.herokuapp.com/
  17.  
  18.             могут отличаться - используй урл - как в задании
  19.         */
  20.  
  21.  
  22.         // create 4 tasks
  23.         /*
  24.             комментарии пишем только в одном случае - если из кода что-то не понятно
  25.             также - формулируем комментарии как можно более лаконично
  26.             если из кода не понятно - какую операцию выполняем - только про операцию пишем, а тествоые данные - не описываем
  27.             если и про тестовые данные не ясно - ну что делать, и это уточним
  28.  
  29.             теперь - практически все понятно
  30.             нам не нужно пояснять код addTasks("1", "2", "3", "4");
  31.             этот комментарий и практически все остальные - уйдут
  32.         */
  33.         addTasks("1", "2", "3", "4");
  34.         assertTasksAre("1", "2", "3", "4");
  35.  
  36.         //delete 2nd task
  37.         deleteTask("2");
  38.         assertTasksAre("1", "3", "4");
  39.  
  40.         //complete & clear task 4
  41.         /*
  42.             вот этот комментарий не уйдет - т к toggle("4") - не совсем понятно - что делаем с таской
  43.             но в то же время понятно - с какой таской работаем
  44.             так что - complete & clear - будет достаточно
  45.         */
  46.         toggle("4");
  47.         clearCompleted();
  48.         assertTasksAre("1", "3");
  49.  
  50.         //mark all as completed & clear all
  51.         /*
  52.             можно лаконичнее - complete all & clear
  53.         */
  54.         toogleAll();
  55.         clearCompleted();
  56.         task.shouldBe(empty);
  57.  
  58.     }
  59.     /*
  60.         используй пропуски строк - как инструмент для форматирования кода
  61.         между методами одного класса - не помешала бы пропущенная строка
  62.  
  63.         почитай https://google.github.io/styleguide/javaguide.html#s4.6.1-vertical-whitespace
  64.     */
  65. ***************************************************************
  66.     private void toggle(String ... taskToggle){
  67.             for(String text: taskToggle) {
  68.                 task.find(Condition.exactText(text)).$(".toggle").click();
  69.             }
  70.     }
  71. /*
  72.     Для добавления тасок - есть причины реализовать метод так, чтобы можно было добавлять сразу несколько тасок
  73.     Прежде всего потому, что для некоторых тестов вначале нужно создать несколько тасок
  74.  
  75.     Для остальных действий - точно нету смысла реализовывать метод, работающий с несколькими тасками
  76.  
  77.     Нам и проверки надо делать надо после каждого выполненного действия
  78.  
  79.     что касается имен
  80.  
  81.     метод называется toggle
  82.     верное решение - имя точно отражает то, что мы делаем
  83.     в имени метода мы не указали - что работаем с тасками
  84.     и это ОК - т к только над тасками мы действия и выполняем
  85.  
  86.     имя параметра
  87.     с чем мы работаем - с текстами тасок (а будем - с текстом таски - т к изменим реализацию)
  88.     вот и примени термин taskText  - для понятия текст таски
  89.     и далее - если у нас параметр = текст таски - применяй тот же термин
  90.  
  91.     про то, что мы будем делать с таской - уже сказали в имени метода,
  92.     и в имени параметра метода про это уже писать не нужно
  93.  
  94.     придерживайся правила - для одного понятия использовать один термин
  95.     не нужно использовать разные термины/написания/синонимы и прочее
  96.     в таком случае - код будет более точным и более однозначным,
  97.     с ним будет проще работать
  98.  
  99.     используй import static для Condition.exactText
  100.     и тогда в коде вместо Condition.exactText
  101.     сможешь писать exactText
  102. */
  103. ************************************************
  104.  
  105.     private void toogleAll(){
  106. /*
  107.     имя точное = точно говорит, что делаем
  108.     имя лаконичное - не пишем, что действие выполняется над тасками
  109.     и это ОК
  110.  
  111.     с реализацией тоже все ок
  112.  
  113.     на именах заостряю внимание - т к не для всех методов это так
  114. */
  115. ***************************************************
  116.     private void deleteTask(String taskDelete){
  117. /*
  118.     А тут - уточняешь в имени, что именно таску удаляешь
  119.     Надо быть последовательнее
  120.  
  121.     или
  122.     add(String ... taskTexts)
  123.     toggle(String taskText)
  124.     delete(String taskText)
  125.     ...
  126.  
  127.     или
  128.     addTask(String ... texts)
  129.     toggleTask(String text)
  130.     deleteTask(String text)
  131.     ...
  132.  
  133.     оба ваорианта возможны
  134.  
  135.     в первом варианте - мы из имени убрали уточнение - что работаем с тасками, но уточнили в имени параметра это
  136.     во втором варианте - мы не убирали из имени это уточнение, но сделали лаконичнее имена параметров
  137.  
  138.     первый вариант тебе даст более лаконичный код
  139.     и его возможно тут использовать - т к в приложении только над тасками действия и выполняются
  140.  
  141.     очень важно = это относится только к методам-действиям
  142.     и не касается имен методов-проверок
  143.     т к даже в таком простом приложении - тут надо быть максимально точным
  144. */
  145. ********************************
  146.     private void assertTasksAre(String ... tasksAssert){
  147.         $$("#todo-list li").shouldHave(exactTexts(tasksAssert));
  148.     }
  149. /*
  150.     про переменную tasks - не забывай
  151.     почитай про DRY
  152.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.lzxge2s5ilgv
  153.  
  154.     имя параметра - тоже подправь
  155.  
  156.     и для проверки tasks.shouldBe(empty); - тоже реализуй метод
  157.     чтобы у нас был один подход к реализации проверок
  158. */
Advertisement
Add Comment
Please, Sign In to add comment