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

时间:2011-07-30 15:54:06

标签: asp.net-mvc

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

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. 如何处理物品?我应该处理工作单位还是 服务(进而处理工作单位)?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

通常,您希望尽可能多地隔离您正在测试的内容。因此,如果您正在测试控制器,那么唯一的“真实”对象应该是您的控制器。通过这种方式,您可以让您的模拟服务/存储库从其操作中返回受控/已知的内容和/或确保您的控制器正在调用正确的内容。

如果你不那样做,那么你的单元测试就更像是一个集成测试,它可以确保几个“实时”对象按计划一起工作。