Unit && UI Tests in Java Ruslan Bulatov ESPE-soft 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
Agenda 2 • Класификация • Unit тесты • TDD • Интеграционные тесты • Мутационное тестирование • UI тесты • JS тесты • Q&A?
Виды тестов Время исполнения Ручные UI Приемочные Интерграционные Юнит тесты Колл-во тестов 3
Юнит тесты Цель: изолировать отдельные части программы и показать, что по отдельности эти части работоспособны 4
Юнит тесты 5
Юнит тесты Хорошие юнит тесты должны: • Быть достоверными • Не зависеть от окружения • Быстрыми • Легко поддерживаться • Легко читаться • Запускаться в CI 6
Юнит тесты CI, Continuous Integration - выполнении частых автоматизированных сборок проекта(вместе с тестами) для скорейшего выявления проблем. 7
TDD Нет времени писать тесты, мы и так не успеваем!!! 8
Юнит тесты Писать тесты медленно? Без тестов Разработка Тест Багфикс С юнит-тестами Разработка 9 Тест Багфикс Лайв
TDD Test Driven Development – разработка через тесты 1
TDD 1
TDD • Лучше дизаин кода • Покрытие тестами • Меньше дебага • Рефакторинг без рисков • Импрувменты без проблем • Качественная документация • Большая продуктивность 1
TDD Не нужно писать тесты, если: • Вы делаете сайт-визитку • Код на один раз • Учебный проект • Вы всегда пишете код без ошибок 1
TDD Виды проектов > 1 года : • Без покрытия тестами • С тестами, которые не поддерживаются • С хорошим покрытием тестами 1
TDD Время писать код! 1
Mock - Mock-объект представляет собой конкретную фиктивную реализацию интерфейса, предназначенную исключительно для тестирования. 1
Mock 1
Интеграционные тесты (Функциональные ) • Проверяю бизнес логику • Проверяют работу с внешними источниками • Проверяют безопасность 1
Интеграционные тесты • Медленные • Вечная поддержка Бездумное написание тестов не только не помогает, но вредит проекту. 1
Интеграционные тесты • Дарт Автотестиус Прикрываясь методами джедаев добавляет в проект CI с автотестами, но делает это таким образом, что скоро проект делится на две части — те, кто пишут код и те, кто поддерживает тесты. 2
Интеграционные тесты И опять писать код… 2
Мутационное тестирование 2
Мутационное тестирование - или О чём молчит Code Coverage 2
Мутационное тестирование 2
Мутационное тестирование 2
Мутационное тестирование 2
Мутационное тестирование Виды мутаций: Изменение операторов <, <=, >, >= • Инвертирование операторов • Замена if(a==b) → if(true) • Математические замены • Замена return функции • Выбрасование вызово void функций 2
Мутационное тестирование Запуск: mvn org. pitest: pitest-maven: mutation. Coverage или через IDEA: PIT mutation testing idea plugin 2
Мутационное тестирование PIT дает вам уверенность в ваших тестах! 2
UI тесты 3
UI тесты Web фраемоврки: Desktop: • Selenium • Thucydides • Selenide • Visual Studio Coded. UI • Ranorex • White 3
Selenide: @Test public void user. Can. Login. By. Username() { open("/login"); $(By. name("user. name")). set. Value("Jhony"); $("#submit"). click(); $(". loading_progress"). should(disappear); // Само подождёт, пока элемент исчезнет $("#username"). should. Have(text("Hello, Jhony!")); // Само подождёт, пока у элемента появится нужный текст } 3
Selenide • Запуск как обычные юнит-тесты • Запуск на CI • Auto-Completion • Поддержка Ajax • Бесплатный продукт с открытым исходным кодом 3
Selenide Попробуем 3
Jasmine - это BDD фреймворк (Behavior-Driven Development — Разработка на Основе Поведений) для тестирования Java. Script кода. 3
Jasmine 3
Jasmine Запуск: mvn clean test Запуск сервера для BDD: mvn jasmine: bdd 3
Читаем http: //habrahabr. ru/post/120101/ http: //habrahabr. ru/company/etnasoft/blog/169381/ http: //ru. selenide. org/ http: //pitest. org http: //jasmine. github. io/ http: //searls. github. io/jasmine-maven-plugin/usage. html 3
Откуда качаем https: //github. com/livekazan/unit. UITest. git 3
Q&A? 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
41