Я думаю, что этот вопрос вращается вокруг этого утверждения:
Интерфейс оболочки не похож на оригинальный интерфейс
Это, вероятно, указывает на то, что в переводе между оболочкой и исходным интерфейсом задействовано значительное количество логики. Это звучит очень похоже на антикоррупционный слой , и если эта логика сложная, ее следует проверить.
Лучший способ сделать это - извлечь интерфейс 1: 1 из исходного API. Однако это не тот интерфейс, который вы предоставляете остальной части приложения. Интерфейс, который вы предоставляете остальной части приложения, может быть Facade поверх извлеченного интерфейса. В некотором смысле вы могли бы сказать, что извлеченный интерфейс - это деталь реализации антикоррупционного уровня, а не то, что доступно остальной части приложения.
Это позволяет вам выполнить модульное тестирование трансляции между интерфейсом Facade и извлеченным интерфейсом, сохраняя при этом оригинальный, трудный для тестирования компонент вне теста.
Остается перевод между извлеченным интерфейсом и исходным компонентом. Однако, если этот интерфейс был извлечен как отображение 1: 1 исходного компонента, реализация должна состоять из чистого делегирования. Другими словами, реализация будет иметь цикломатическую сложность 1 и, таким образом, будет скромный объект , который не нуждается в модульном тестировании.
Возможно, вы все же захотите провести несколько интеграционных или системных тестов в завершенной системе, но они могут взять на себя роль тестов дыма, потому что у вас уже должно быть достаточное покрытие от юнит-тестов.