Реальный проект показал мне, что нельзя писать модульные тесты, и тогда интеграция и даже противоположное направление неправильны :-) Поэтому я обычно пишу модульные тесты вместе с интеграционными.
Зачем? Позвольте мне написать, как я вижу оба вида тестов:
Модульные тесты - В дополнение к Википедии и всем известной информации, модульные тесты помогают вам сузить ваш дизайн , улучшить вашу модель, отношения. Процесс прост: как только вы начинаете вводить новый проект / новый компонент, большую часть времени вы делаете какой-то PoC . Когда вы закончите, у вас всегда будут длинные методы, длинные классы, некогерентные методы и классы и т. Д.
Модульные тесты помогают вам устранить эти проблемы, поскольку, когда вы выполняете реальное модульное тестирование с использованием описанных выше классов mocks (без зависимости от других компонентов), они не поддаются тестированию. Основным признаком непроверяемого кода является большая имитирующая часть тестов, потому что вы вынуждены имитировать множество зависимостей (или ситуаций)
Интеграционные тесты - правильные и рабочие тесты говорят вам, что ваш новый компонент (или компоненты) работают вместе или с другими компонентами - это обычное определение. Я обнаружил, что интеграционные тесты в основном помогают определить, как использовать ваш компонент со стороны потребителя .
Это действительно важно, так как иногда вам говорят, что ваш API не имеет смысла извне.
Ну, что произойдет, когда я напишу модульные тесты и интеграционные тесты позже?
У меня хорошие классы, понятный дизайн, хороший конструктор, короткие и согласованные методы, готовность к IoC и т. Д. После того, как я передал свой класс / API какому-то потребителю, например разработчику из группы интеграции или графического интерфейса, он не смог использовать мой API, так как это кажется нелогичным , странно. Он был просто смущен. Поэтому я восстановил API в соответствии с его точкой зрения, но также потребовалось переписать много тестов, потому что я был вынужден изменить методы, а иногда и процесс использования API.
Ну, что произойдет, когда я напишу интеграционные и модульные тесты позже?
Я получил точный поток, хорошее удобство использования. У меня также есть большие классы, некогерентный код, отсутствие регистрации, длинные методы. Код спагетти
Какой мой совет?
Я изучил следующий поток:
- Разработайте базовый каркас вашего кода
- Напишите интеграционные тесты, которые говорят, имеет ли это смысл с точки зрения потребителя. Базового варианта использования пока достаточно. Тест явно не работает.
- Напишите код вместе с модульными тестами для каждого класса.
- Напишите остаток / отсутствие интеграционных тестов. Было бы лучше реализовать эти тесты в # 3, как вы улучшаете свой код.
Обратите внимание, что я сделал небольшую презентацию о модульном / интеграционном тестировании, см. Слайд № 21, где описан скелет.