Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TodoEndToEndTest {
- /*
- EndToEnd - єто свойство тест-метода, а не тест-класса
- и эта информация - мало помогает в понимании - что делает тест
- потому - EndToEnd - нет смысла выносить в имя ни тест-класса, ни тест-метода
- И в данном случае - для тест-класса подошло бы имя - как в прошлой работе
- а поскольку - хранить будешь работы в разных пекеджах, одинаковые имена классов не будут проблемой
- */
- @Test
- public void testTasksFlow() {
- open("https://todomvc4tasj.herokuapp.com");
- add("1", "2", "3");
- /*
- мы обсуждали в слеке - какие варианты неявных проверок - правильные
- теперь - после добавления 3-ех тасок
- операция edit("2", "222"); - не проверяет предыдущую
- т к проверяет состояние лишь одной из 3-х тасок
- вот добавил бы одну таску - тогда и редактирование можно было использовать как неявную проверку
- */
- edit("2", "222");
- /*
- используй тестовые данные как подсказки
- edit("2", "2 edited");
- цель - далее понимать, что это за таска и что с ней происходило
- */
- delete("222");
- /*
- и вот эта операция - delete("222") - была бы хорошей неявной проверкой
- если бы эта таска была единственной в списке
- также советую - не торопиться удалять таску
- т к на ней еще разного можно напроверять
- и получится - что меньше тасок придется добавить
- следующая операция - toggle("3") - никак не проверяет операцию delete("222")
- нужна проверка
- если не можешь использовать неявную проверку через действие - реализуй явную
- но - проверять нужно сразу
- */
- toggle("3");
- unToggle("3");
- toggleAll();
- unToggleAll();
- /*
- вопросы к терминам toggle и unToggle. Про это - ниже
- проверок - не хватает
- и это - не лучший способ проверить эти операции
- даже если они вообще не будут работать - тест пройдет
- */
- toggle("1");
- /*
- избегай повторений
- complete - уже покрыто
- и для smoke - этого достаточно
- снова отсылаю тебя к информации, что выдала в слеке, при обсуждении этого задания
- */
- clearCompleted();
- assertTasksAre("3");
- filter("active");
- /*
- по организации переходов по фильтрам - почитай и примени
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
- смотри какая тестовая ситуация у нас
- на all - была в списке - активная таска 3
- перешли на active
- в списке - снова та же таска 3 (кстати, этого ты не проверил)
- получается - что состояние списка - не поменялось
- и мы не можем быть на 100% уверены - что фильтрация - работает
- да, состояние списка - верное
- но так могло быть и при условии, что фильтрация работает неверно
- для качественной проверки фильтра - нужна ситуация, когда
- состояние списка тасок меяется
- и новое состояние списка - верное
- это касается любого перехода с фильтра на фильтр
- не забывай про проверки
- */
- add("1", "2");
- /*
- не стоит добавлять новые таски с такими же текстами, как были у ранее удаленных
- так будет тяжелее понимать - это какая таска 1 - ктороую мы создали вот тогда или вот тогда
- и снова - не торопись добавлять таски
- в случае если видимых тасок в списке - более одной - использовать неявные проверки через действие - не сможешь
- а это - очень желательно использовать
- эффективность тестов вообще
- и тестов, реализующих smoke покрытие в частности,
- это очень важно
- чем быстрее мы получим фидбек - какие проблемы у нас есть на уровне smoke - тем бістрее можно будет притупить
- либо к более глубокому тестированию
- либо к исправлению критичных ошибок
- т е - в smoke - не нужно делать лишнего
- и тем не менее - проверено должно быть каждое действие
- (если возможно - неявной проверкой через следующее действие, а нет - просто явной проверкой)
- ведь если проверок недостаточно - и тест упал - то понять - что же пошло не так - будет проблематично
- и это занятие - тоже будет жрать драгоценное время
- */
- assertTasksAre("3", "1", "2");
- edit("3", "333");
- delete("333");
- toggle("1");
- toggleAll();
- clearCompleted();
- /*
- проверок не хватает
- и все из тут покрытого - уже покрыто на all
- для smoke - каждое вісокоприоритетное действие - достаточно покрыть лишь единожды
- покрыл edit на all фильтре, все - больше не покрывай
- и т д
- перечитай в слеке - наше обсуждение этих вопросов
- там есть ответы - почему так
- единственное, что придется делать не единожды - это добавлять таски
- но тоже - не стоит это делать бездумно
- только минимально необходимое и только когда это нужно
- не забывай также - распределить покрытые операции по фильтрам - поравномернее
- например - на all - покрыли 3 операции, на active - тоже 3, а на completed - 2 (это просто например)
- такая картика - равномерная
- в отличие от такой
- на all - покрыли почти все, на других фильтрах - почти ничего
- почему это важно - тоже было в слеке
- используй в работе табличку или список с юз кейсами
- это поможет спланировать оптимальное покрытие
- */
- assertNoTasks();
- add("1", "2", "3");
- toggleAll();
- /*
- и покрыто ранее, и не проверено
- */
- filter("completed");
- edit("1", "111");
- delete("111");
- assertVisibleTasksAre("2", "3");
- unToggle("2");
- unToggleAll();
- filter("all");
- add("1", "2", "3");
- toggleAll();
- filter("completed");
- clearCompleted();
- /*
- проверок - не хватает
- много повторений
- на каждый фильтр - тоже - достаоочно лишь единожды зайти (т к реализуем Smoke покрытие)
- */
- open("https://todomvc4tasj.herokuapp.com");
- /*
- это совсем непонятное действие
- зачем?
- */
- add("1");
- filter("active");
- filter("all");
- filter("completed");
- filter("all");
- filter("completed");
- filter("active");
- filter("all");
- filter("active");
- filter("completed");
- /*
- ну вот - мы побегали по фильтрам
- вопрос - мы что-то проверили?
- только то, что можем кликнуть на линке
- а этого достаточно?
- не нужно повторений
- нужны проверки
- */
- }
- ******************************************************
- private void add(String... taskTexts) {
- for (String text : asList(taskTexts)) {
- $("#new-todo").setValue(text).pressEnter();
- }
- }
- /*
- без asList - тоже все ок будет
- почитай
- http://www.linkex.ru/java/varargs.php
- http://stackoverflow.com/questions/2161912/why-varargs-should-be-the-last-in-method-signature
- http://www.java-tips.org/java-se-tips-100019/24-java-lang/481-using-the-varargs-language-feature.html
- */
- **************************************************************
- private void edit(String fromTaskText, String toTaskText) {
- $$("#todo-list>li").find(exactText(fromTaskText)).doubleClick();
- $(".editing .edit").setValue(toTaskText).pressEnter();
- }
- /*
- Примени знания из http://pastebin.com/4FpBTqDa (строки 92-112)
- */
- private void editAndCancel(String fromTaskText, String toTaskText) {
- $$("#todo-list>li").find(exactText(fromTaskText)).doubleClick();
- $(".editing .edit").setValue(toTaskText).pressEscape();
- }
- /*
- имя метода - будет точнее cancelEdit
- т к мы отменяем редактирование (ключевой глагол = отменить)
- посмотри на код этого метода и метода edit
- очень похожи
- реализуй метод xxx(название подбери сам - в соответствии с тем - что метод делает)
- который выполнить весь одинаковый доя этих методов код
- и вернет SelenideElement = элемент, в который ввели новый текст
- и далее будешь его переиспользовать - xxx(....).pressEnter();
- */
- ************************************************
- private void filter(String taskStatus) {
- $$("#filters li").find(exactText(taskStatus)).click();
- }
- /*
- и выше привела - что в faq почитать
- и тут тоже http://pastebin.com/4FpBTqDa, строки 137-157
- */
- ************************************************************
- private void assertTasksAre(String... taskTexts) {
- private void assertVisibleTasksAre(String... taskTexts) {
- private void assertNoTasks() {
- /*
- тоже в слеке обсуждали, и видео ты смотрел
- хорошие варианты проверок - или 2 штуки, или 4
- подними переписку
- */
- ******************************************
- private void toggle(String taskText) {
- tasks.find(exactText(taskText)).$(".toggle").click();
- }
- private void unToggle(String taskText) {
- tasks.find(exactText(taskText)).$(".toggle").click();
- }
- private void toggleAll() {
- $("#toggle-all").click();
- }
- private void unToggleAll() {
- $("#toggle-all").click();
- }
- /*
- посмотри на перевод слова toggle = переключить
- unToggle = ??
- методы toggle и unToggle - делают одно и то же
- пересмотри видео предыдущее - почему для метода, который мы использовали для закомпличивания
- мы выбрали название toggle, а не complete
- название метода - должно четко отражать то, что метод делает
- независимо от контекста его вызова
- судя по реализации = unToggle - это reopen
- примени этот метод к активной таске
- какое действие будет выполнено?
- лучшее, но не единственное, решение -
- оставить методы toggle и toggleAll
- и их использовать как для закомпличивания, так и для переоткрытия
- еще раз отошлю тебя к нашим обсуждениям в слеке
- reopen all - в рамках smoke - покрывать не стоит
- найди этот текст
- */
- ******************************************
- private void listCompletedEmpty() {
- $$(".completed").shouldBe(empty);
- }
- /*
- метод не применяется и он по многим причинам не хорош
- в прошлом видео - примерно на 58-ой минуте было про это
- про то, какие проверки нужны, и нформация у тебя есть, это обсуждали в слеке плюс я расшарила тебе видео про это
- также - работать с коллекцией $$(".completed") (даже если бы тебе нужна была коллекция закомпличеных тасок) - неверно
- см http://pastebin.com/4FpBTqDa
- ну и название метода-проверки - уже тоже обсуждали - с чего должно начиаться и почему
- */
- **********************************
- private void itemsLeftCounter(String valueTasksCounter) {
- $("#todo-count strong").shouldHave(exactText(valueTasksCounter));
- }
- /*
- это метод - проверка? поправь ему имя
- что мы проверяем - количество активных тасок
- разумнее оперировать параметром-числом для этого метода
- сама реализация метода - ок
- советую подумать и над именем метода, и над именем параметра
- с одной стороны - должна быть точность
- с другой - лишнего тоже не стоит писать
- */
Advertisement
Add Comment
Please, Sign In to add comment