2011-08-09 27 views
0

我正在研究TDD,并且遇到了可以使用一些帮助的场景。TDD在内部构造函数中注入Mocked Repository(UnitOfWork)

我的项目使用MVC3,并被构建为具有BAL和DAL层。每个图层都在其自己的项目中。 BAL通过Repository Pattern访问数据库。由于我使用的是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,但我不知道如何注入它,因为构造函数是内部的。我宁愿不写出驻留在每个项目中的单元测试。

有什么想法?

回答

3

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

另一种可能性是公开此构造函数,因为这会使该类更加可重用。通常,DI连线应该在体系结构(GUI)的最外层进行,并且这种不同依赖性的构造器需要公开。这允许此DAL层在其他项目中重用。

+0

[InternalsVisibleTo]将按原样解决我的问题。我可能仍然缺少DI的一些东西,但是我展示的示例类是在BAL中,UnitOfWork在DAL中。我有内部标记的构造函数,因为我有另一个类来控制对示例类的访问。我将不得不考虑这一点。谢谢! – AFrieze