TDD将Mocked Repository(UnitOfWork)注入内部构造函数

时间:2011-08-09 15:44:35

标签: asp.net-mvc-3 tdd repository

我正在调查TDD,我遇到了一个可以使用的方案。

我的项目使用MVC3,并且结构为具有BAL和DAL层。每个图层都在自己的项目中。 BAL通过存储库模式访问数据库。由于我使用的是EntityFramework,我还实现了UnitOfWork模式。以下是BAL中的服务类:

public class ExampleService
{
    private UnitOfWork unitOfWork;
    private bool isProcessing = false;

    internal ExampleService(UnitOfWork unitOfWork)
    {
        this.unitOfWork = unitOfWork;
    }
    public void ExposedMethod()
    {
        //do stuff with the unitOfWork
    }
}

问题:我想为此创建一个单元测试(显然我应该在代码之前编写测试)。但是,如果我按原样运行代码,则测试将是集成测试,因为它将使用UnitOfWork并连接到我的数据库。我可以模拟一个新的UnitOfWork来访问内存中的虚拟数据,但我不明白如何注入它,因为构造函数是内部的。我宁愿不写每个项目中的单元测试。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用[InternalsVisibleTo]属性修饰包含此类的程序集,以使所有内部成员都可以看到单元测试项目。

另一种可能性是使这个构造函数公开,因为这会使类更可重用。通常,DI连接应该在架构的最外层(GUI)中完成,并且对于不同依赖关系的构造函数需要是公共的。这允许在其他项目中重用此DAL层。