【问题标题】:How should I implement unit testing when working with Repositories, Unit of Work, and Services?在使用存储库、工作单元和服务时,我应该如何实施单元测试?
【发布时间】:2011-10-16 14:09:45
【问题描述】:

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

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. 如何处置这些对象?我应该处置工作单元还是 服务(依次处理工作单元)?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        相关资源
        最近更新 更多