Testing
Основные библиотеки
- JUnit
- TestNG
- REST-assured - для проверки REST запросов. Применяется в интеграционном тестировании.
- Jacoco - библиотека для проверки покрытия кода.
- Chaos Monkey - библиотека для проверки стресс тестирования(CHAOS ENGINEERING).
Правила тестирования
Ваши тесты должны
- Достоверными.
- Не зависеть от окружения.
- Легко поддерживаться.
- Легко читаться и быть простыми для понимания.
- Соблюдать единую конвенцию именования.
- Запускаться регулярно в автоматическом режиме.
- Каждый тест должен проверять только одну вещь.
Хороший пример теста "AAA (arrange, act, assert)". Пример калькулятора.
class CalculatorTests
{
public void Sum_2Plus5_7Returned()
{
// arrange
var calc = new Calculator();
// act
var res = calc.Sum(2,5);
// assert
Assert.AreEqual(7, res);
}
}
Принципы для написания тестируемого кода.
- Мыслите интерфейсами, а не классами, тогда вы всегда сможете легко подменять настоящие реализации
подделками в тестовом коде.
- Избегайте прямого инстанцирования объектов внутри методов с логикой. Используйте фабрики или dependency
injection. В этом случае использование IOC-контейнера в проекте может сильно упростить вам работу.
- Избегайте прямого вызова статических методов.
- Избегайте конструкторов, которые содержат логику: вам сложно будет это протестировать.
Измерения успешности внедрения юнит-тестов в вашем проекте следует использовать метрики
- Количество багов в новых релизах (в т.ч. и регрессии)
- Покрытие кода
Способы измерения покрытия
- Покрытие операторов — каждая ли строка исходного кода была выполнена и протестирована.
- Покрытие условий — каждая ли точка решения (вычисления истинно ли или ложно выражение) была выполнена и
протестирована.
- Покрытие путей — все ли возможные пути через заданную часть кода были выполнены и протестированы.
- Покрытие функций — каждая ли функция программы была выполнена.
- Покрытие вход/выход — все ли вызовы функций и возвраты из них были выполнены.
- Покрытие значений параметров — все ли типовые и граничные значения параметров были проверены.