在使用存储库、工作单元和服务时,我应该如何实现单元测试?



我的控制器通常使用一个或两个服务。反过来,我向这些服务注入相同的工作单元以使用相同的上下文。即:

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);
    }
}

我的问题:

  1. 我应该如何实现单元测试?我应该注入功单位吗只有,还是工作单位和服务?
  2. 如何处理对象?我应该处理这个工作单位吗服务(它们依次处理工作单元)?

1.)所有的依赖项都应该被注入,所以你在控制器中添加的任何东西,对你来说就是你的工作单元和两个服务。这将使测试正常工作,因为您将能够模拟所有依赖项。实际上,仔细看看,你不应该注入unitofwork类,因为它只是服务的一个依赖项。

2.)如果工作对象单元实际上正在处理所有的工作,那么您的服务不应该需要处理。我的建议是在UnitOfWork类上实现idisposable,并将其放入using()

一般来说,您希望尽可能多地隔离您正在测试的内容。所以如果你在测试你的控制器,唯一的"真实"对象应该是你的控制器。通过这种方式,您可以让模拟服务/存储库从其操作返回受控/已知的内容,并/或确保控制器在其上调用正确的内容。

如果您不这样做,那么您的单元测试更像是一个集成测试,它确保几个"活动"对象按计划一起工作。

相关内容

最新更新