https://habr.com/ru/post/358950/
Тестируют один юнит функциональности.
Не должны ходить в базу или внешние сервисы.
Используя реальные объекты, при появлении бага в одной функции, могут сломаться другие тесты зависимые от этой функции.
Тестируют несколько классов одновременно. Могут ходить в базу или стороние сервисы.
Разница между юнит и интеграционным тестом несколько размыта. И, возможно, не слишком принципиальна. Тест, который не ходит в базу или сторонние сервисы, но использует множество реальных функций из различных пакетов будет считаться юнит или интеграционным? Тест использующий больше одной функции (метода) уже не юнит?
Kent Beck on unit tests (не нужно писать юнит-тесты на все, а только на то в чем ожидаешь допустить ошибку)
https://martinfowler.com/bliki/ContractTest.html
Тестируют всю систему в целом ? Пример: гоферсы
Вот что: в какой-то момент следует убедиться, что ваша программа правильно работает с точки зрения пользователя, а не только с технической точки зрения. Как вы называете эти тесты — на самом деле не так важно. А вот наличие этих тестов важно. Выберите любой термин, придерживайтесь его и напишите эти тесты.
- описывают только позитивные сценарии использования
CI должен давать быструю обратную связь
Дублирование плохо (время на написание, чтение, выполнение)
- Если в тесте более высокого уровня обнаружена ошибка, а в тестах более низкого уровня нет, то необходимо писать тест более низкого уровня.
- Сдвигайте тесты как можно ниже по уровням пирамиды.
https://martinfowler.com/bliki/TestDouble.html
С моками мы проверяем поведение (вызов методов), а со стабами мы проверяем состояние
https://martinfowler.com/articles/mocksArentStubs.html
Tests written with mocks usually follow an `initialize -> set expectations -> exercise -> verify` pattern to testing. While the pre-written stub would follow an `initialize -> exercise -> verify`. https://stackoverflow.com/a/3459491/1856086
Резюме:
Next time: