你真的应该看看使用模拟框架来隔离你的测试与实际的依赖对象。我假设你使用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,
...
};
@tvanfosson:我喜欢我的版本的标题更好,其实;-) – mghie 2009-02-11 21:00:01
我要修复它,但我敢肯定,我尝试它的那一刻相同的竞争条件将instaniate本身扰乱了标题再次。 – 2009-02-11 21:01:42