Курс по Java, 2016
Тестирование и JavaЮнит-тесты
Курс по Java, 2016
Виды тестирования
Курс по Java, 2016
Юнит-тесты
Курс по Java, 2016
Юнит-тестирование
Постоянно и непрерывно
Легко проверить всё повторно
Пишем конкретные тесты
Тесты запускают настоящий код
Тестируем каждый кусочек по-отдельности
Тестируем при каждом изменении кода
Проверяем, как оно функционирует
Автоматически
Можно знать, как устроен модуль
Тестируем каждый метод
Курс по Java, 2016
Юнит-тесты — хорошо
Уверенность в коде, можно рефакторить
Тест — хорошая документация
Меньше отладки, более продуктивная разработка
Получаются более независимые модули
Получаются правильные абстракции, появляется тестовая реализация
Курс по Java, 2016
Юнит-тесты — сложно
Тесты нужно писать, трудно привыкнуть
Для каждой версии кода нужно отслеживать результаты тестов
Невозможно протестировать всё: безопасность, функционал, UI плохо поддаются автоматическому тестированию
Курс по Java, 2016
Юнит-тесты — опасно
Тесты могут быть ошибочными,правильность модулей не означает правильность системы в целом, заглушки — не настоящие
Создают ложное ощущение надежностиЕсть соблазн отключения нерабочих тестов
Курс по Java, 2016
JUnit
<dependencies> <dependency> <scope>test</scope> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency></dependencies>
Maven scopes:● compile● provided● runtime● test
Курс по Java, 2016
Тестimport org.junit.Before;import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
public class ArrayReverserTest {
private ArrayReverser reverser;
@Before public void setUp() { this.reverser = new ArrayReverser(); }
@Test public void testReverse() { int[] original = {1, 2, 3}; int[] reversed = this.reverser.reverse(original); assertArrayEquals("wrong reverse", new int[] {3, 2, 1}, reversed); }
}
Курс по Java, 2016
JUnit в IDEA
Курс по Java, 2016
JUnit в Maven % mvn package[INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------------------------[INFO] Building tdd 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] ...
------------------------------------------------------- T E S T S-------------------------------------------------------Running ArrayReverserTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 secResults :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
...[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.521s[INFO] Finished at: Thu Mar 31 19:23:27 OMST 2016[INFO] Final Memory: 9M/266M[INFO] ------------------------------------------------------------------------
Курс по Java, 2016
Maven lifecycle
Курс по Java, 2016
JUnit в Maven % mvn test
% mvn -Dmaven.test.skip=true package
Курс по Java, 2016
Покрытие в IDEA
Курс по Java, 2016
Покрытиев Maven
<build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.6.201602180812</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <argLine>${argLine}</argLine> </configuration> </plugin> </plugins></build>
Курс по Java, 2016
Покрытие в Maven
% mvn jacoco:prepare-agent % mvn test % mvn jacoco:report
Курс по Java, 2016
Домашнее задание
Написать юнит-тесты для всех методов всех написанных в рамках проекта классов.
Добиться 100% покрытия.
Курс по Java, 2016
Курс по Java, 2016
Курс по Java, 2016
Курс по Java, 2016
Курс по Java, 2016
Курс по Java, 2016
TDD buzzwords
keep it simple, stupid - KISS
you ain’t gonna need it - YAGNI
fake it till you make it
Курс по Java, 2016
Extreme Programming (XP)
Курс по Java, 2016
Agile Manifesto
Личности и их взаимодействия важнее, чем процессы и инструменты;
Работающее программное обеспечение важнее, чем полная документация;
Сотрудничество с заказчиком важнее, чем контрактные обязательства;
Реакция на изменения важнее, чем следование плану.
Курс по Java, 2016
Курс по Java, 2016