Вам действительно стоит взглянуть на использование моделирующей среды, чтобы изолировать ваш тест от реальных зависимых объектов. Я предполагаю, что вы используете C # (из ключевого слова var
), поэтому приведу пример из RhinoMock.
var respository1 = MockRepository.GenerateMock<Repository1>();
repository1.Expect( r => r.SomeMethod() ).Return( someValue );
var repository2 = MockRepository.GenerateMock<Repository2>();
repository2.Expect( r => r.Method2() ).Return( someValue );
...
var service = new Service( repository1, repository2, ... );
repository1.VerifyAllExpectations();
repository2.VerifyAllExpectations();
Используя этот механизм, вы можете контролировать, как фиктивный объект реагирует на тестируемый класс, и вы изолируете свой тестовый код от связанных зависимостей. Вы также можете проверить, правильно ли ваш тестируемый класс взаимодействует с классами, от которых он зависит, проверив, что настроенные вами ожидания были выполнены (вызваны).
Что касается количества параметров в конструкторе, рассмотрите возможность предоставления конструктора по умолчанию, который не принимает параметров, и наличия открытых сеттеров для зависимостей. Затем вы можете использовать механизмы удобства в C # 3.0 для их определения.
var service = new Service {
Repository1 = repository1,
Repository2 = repository2,
...
};