Как выглядят ваши тесты?
Вы уверены, что пишете модульные тесты, а не тесты более высокого уровня для нескольких компонентов вашего кода? Чистый модульный тест должен вызывать только один метод, и мы надеемся, что этот метод будет иметь ограниченные вызовы других методов (возможно, через mocking ).
Сосредоточившись на наименьшей возможной единице, вы можете написать код для проверки конкретных крайних случаев. Принимая во внимание, что если вы тестируете на более высоком уровне, вам часто придется писать все типы перестановок в граничных случаях. Когда у вас есть все самые маленькие блоки, вы можете написать несколько интеграционных тестов более высокого уровня, чтобы убедиться, что все эти блоки собраны правильно.
Например, если бы у меня было приложение, которое считывает в CSV-файл котировки акций и усредняет все котировки за определенный день, я бы написал несколько тестов:
- Модульные тесты вокруг разбора CVS
- Юнит-тесты вокруг группировки дат
- Юнит-тесты вокруг усреднения
- Юнит-тесты вокруг отображения ответа
- И небольшое количество интеграционных тестов, которые могут взять очень небольшой файл CVS и пройти его через весь процесс.
Я прошу прощения, если я делаю предположения о ваших модульных тестах, но из своего опыта я нахожу, что часто то, что люди называют модульными тестами, не являются реальными модульными тестами, а скорее интеграционными тестами (или как вы предпочитаете их называть, например, функциональные тесты , так далее.). Лично я очень виноват в написании тестов, которые были слишком широкими, и каждый раз, когда я пишу тесты, мне приходится заставлять себя не забывать действительно тестировать модуль за один раз.