我的控制器通常会使用一两个服务。反过来,我将相同的工作单元注入这些服务以使用相同的上下文。那就是:
public class TestController : Controller
{
private UnitOfWork _unitOfWork;
private Service1 _service1;
private Service2 _service2;
public TestControler()
{
_unitOfWork = new UnitOfWork();
// here I inject the unit of work to the services.
_service1 = new Service1(_unitOfWork);
_service2 = new Service2(_unitOfWork);
}
}
我的问题:
答案 0 :(得分:2)
1。)所有依赖项都应该被注入,所以你在控制器中新建的任何东西,对你来说都是你的工作单元和两个服务。这将使测试正常工作,因为您将能够模拟所有依赖项。实际上,更多地看一下,你不应该注入unitofwork类,因为它只是服务的依赖。
2。)如果工作单元对象实际上正在处理所有工作,则不应该处理您的服务。我的建议是在UnitOfWork类上实现idisposable并将其放在using()
中答案 1 :(得分:2)
通常,您希望尽可能多地隔离您正在测试的内容。因此,如果您正在测试控制器,那么唯一的“真实”对象应该是您的控制器。通过这种方式,您可以让您的模拟服务/存储库从其操作中返回受控/已知的内容和/或确保您的控制器正在调用正确的内容。
如果你不那样做,那么你的单元测试就更像是一个集成测试,它可以确保几个“实时”对象按计划一起工作。