Запахи связанности.
Тестовая логика в продакшен-коде
Продакшен-код содержит флаги тестового режима, хуки или ветвления, из-за которых поставляемый код под тестом ведёт себя иначе, — и настоящий путь выполнения уходит в продакшен непроверенным.
Только для тестов
Продакшен-классы содержат члены, которые существуют только ради тестов, — геттеры состояния, методы reset(), члены с расширенной видимостью и пометкой @VisibleForTesting, — загрязняя реальный API и провоцируя тесты, проверяющие внутренности вместо поведения.
Трудно тестируемый код
Продакшен-код, чей дизайн (тесная связанность, скрытые зависимости, глобальное состояние, недетерминированный ввод-вывод или сугубо асинхронные интерфейсы) заставляет тесты идти на неуклюжие ухищрения или вовсе делает невозможным проверку модуля в изоляции.