Я хочу проверить первые биты логики. Мне все равно, что происходит в остальной части метода
Похоже, ваш тестируемый код не соответствует шаблону единой ответственности .
Вы можете решить извлечь независимые части этого метода для разделения методов или, что еще лучше, для собственных объектов. В результате ваш текущий метод станет составленным методом, использующим некоторые зависимости с очень маленькой логикой, которую будет легко проверить.
Есть два очевидных недостатка:
- Затем мне нужно было бы открыть SUT, превратив множество внутренних методов, которые, естественно, должны быть закрытыми, в методы с доступом к пакетам, чтобы иметь возможность их тестировать. - олигофрен
Суть в том, что существует необходимость в проверке поведения отправки независимо от фактической бизнес-логики, заложенной в текущий метод.
Это говорит мне о том, что это поведение при отправке является самостоятельной ответственностью, которая должна быть отделена от остальных или метода.
Мне кажется, что вся другая логика принадлежит другим классам, а не только отдельным методам в одном классе.
Это следствие принципа Одинакового уровня абстракции , который мы должны применять как к классам, так и к методам. Эти новые классы действительно обеспечивают по крайней мере package private
доступ к их интерфейсу.
- Я был бы очень тесно связан с внутренним пространством SUT, но, думаю, я уже этим занимаюсь ... - oligofren
Этот "тесно связанный" может существовать только в вашей голове, зная реальную реализацию.
Тот факт, что вам нужно разделить код для тестирования, показывает, что код менее ограничен, как вы думаете.
Я полагаю, что во всех решениях по модульному тестированию есть определенный прагматизм (код только для тестирования, открытие, ...). - олигофрен
Существует довольно простое правило о юнит-тестировании, которое избегает всех этих "прагматических решений":
UnitTest не проверяет код , UnitTest проверяет общедоступное наблюдаемое поведение где public означает: возвращаемые значения и связь с зависимостями .
Нет места для "прагматических решений". Единственное решение: каково ожидаемое поведение CUT ?