Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AtTodoMVCPageWithClearDataAfterEachTest extends BaseTest {
- @Before
- public void openPage(){
- open("https://todomvc4tasj.herokuapp.com/");
- }
- }
- /*
- уже во всех тест-методах = используешь гивен-метод
- встрой открытие урла в гивен-метод
- и окончательно избавься от этого класса
- причем - не просто перенеси открытие урла
- а вот так - если текущий урл не равен такому-то урлу
- то открыть этот урл
- цель = чтоб открывался урл только в случае необходимости
- тут можно сэкономить - на открытиях урла
- */
- *******************************
- public enum TaskStatus {
- ACTIVE,
- COMPLETED;
- @Override
- public String toString(){
- switch(this) {
- case ACTIVE: return "false";
- case COMPLETED: return "true";
- default: throw new IllegalArgumentException();
- }
- }
- }
- /*
- недостаток этого решения - наличие логики в toString()
- лучше бы тут был код попроще
- и оперировал уже какой-то данностью, а не что-то анализировал
- приведу тебе пример - как можно было бы реализовать
- */
- public enum Day {
- MONDAY("понедельник"),
- TUESDAY("вторник"),
- WEDNESDAY("среда"),
- THURSDAY("четверг"),//<<----------------------для каждого значения enum - вызов конструктора, фактически значение = объект класса
- FRIDAY("пятница"),
- SATURDAY("суббота"),
- SUNDAY("воскресенье");
- String description;//<<---------------------------поле для хранения описания дня недели
- public Day(String description) {
- this.description = description;//<<---------------------------логика конструктора - запомнить для объекта его описание
- }
- @Override
- public String toString() {
- return description;//<<---------------------------логика - вывести для объекта - то что для него заполнили
- }
- }
- /*
- В такой реализации - в toString() - уже нету анализа
- еще на этапе вызова конструктора для каждого из членов enum - мы задали текстовое предстваление
- */
- ***********************************************
- /*
- Нету смысла реализовывать enum TaskStatus и class Task - как классы в отдельных java-файлах
- эти классы - нужны только в комплексе с гивен-методами и отдельно от них - не применются
- да и реализация этих классов - не сложная
- Можно эти классы объявить пока - в тест-классе
- Важно - что они будут рядом с гивен-методами
- чуть дальше - мы разберем - как вынести все вспомогательные методы из тест-класса
- вот как раз вместе с гивен-методами и enum TaskStatus и class Task
- тоже переместятся
- получим - не перегруженный деталями тест-класс
- и отдельный класс со вспомогательными методами и классами
- но это - уже в следующей работе
- пока можно enum TaskStatus и class Task разместить в тест-классе, как и гивен-методы
- почитай про nested classes in java
- https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
- https://www.tutorialspoint.com/java/java_innerclasses.htm
- http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members
- можно пока это отложить
- чтоб и без того загроможденный тест-класс еще больше не загромождать
- но в следующей работе - как будешь выосить служебные методы из тест-класса - про это надо не забыть
- */
- **************************************
- @Step
- private void given(Task[]... tasks){
- /*
- Task... tasks - это несколько объектов типа Task
- Task[]... tasks - это несколько объектов типа Task[] = массив тасок
- вопрос - нам нужно передавать несколько тасок или несколько массивов тасок?
- */
- ...
- for(Task[] task: tasks) {
- for (int i = 0; i < task.length; i++) {
- /*
- соответственно - не понадобится вложенных циклов, раз нам не нужно оперировать
- несколькими массивами тасок
- */
- /*
- что до использования private Task[] aTask(TaskStatus taskStatus, String... taskTitles)
- для подготовки значений для вызова given(Task[]... tasks)
- если ты вызываешь метод given(Task[]... tasks) -
- то фактически - ты передаешь один параметр типа Task[] (а могла бы - несколько)
- если ты вызываешь метод given(Task... tasks) -
- то фактически - ты передаешь значение типа Task[] - как вот эти несколько Task... tasks
- http://www.java-tips.org/java-se-tips-100019/24-java-lang/481-using-the-varargs-language-feature.html
- At compile time a vararg is converted to an array.
- */
- *************************************
- @Test
- public void testConfirmEditAtActive(){
- givenAtActive(aTask(ACTIVE, "task1"));
- confirmEdit("task1", "task1 edited");
- assertVisibleTasks("task1 edited");
- assertItemLeft(1);
- }
- @Test
- public void testConfirmEditAtCompleted(){
- givenAtCompleted(aTask(COMPLETED, "task1"));
- confirmEdit("task1", "task1 edited");
- assertVisibleTasks("task1 edited");
- assertItemLeft(0);
- }
- /*
- тестируемые ситуации - очень похожи = единственная таска в списке
- можно в одном из случаев - оперировать единственной видимой таской, при существовании еще и не видимой, к примеру
- пройдись по фиче-тестам - сравни тестовые ситуации
- постарайся одну и ту же фичу на разных контекстах тестировать используя разные тестовые ситуации
- с удалением - тоже похоже, ситуации нужно разнообразить
- просмотри все тест-методы на этот предмет
- */
- *****************************
- public void testSwitchToAllAtActive(){
- givenAtAll(aTask(ACTIVE, "task1"), aTask(COMPLETED, "task2"));
- filterAll();
- assertVisibleTasks("task1", "task2");
- assertItemLeft(1);
- }
- /*
- посмотри на реализацию и на то, что обещали в имени метода
- мы то делаем, что планировали?
- */
- ******************
- @Test
- public void testSwitchToActiveAtCompleted(){
- /*
- еще по фильтерингу - есть вот такой метод
- в тест-плане - запланировано 3 фиче-теста
- и еще - покрытие е2е отразено немного не верно
- посмотри комментарии в тест-плане
- откорректируй тест-план
- допокрой - что не хватает
- проверь чтоб тестовые ситуации были разные
- */
Advertisement
Add Comment
Please, Sign In to add comment