我正在调查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来访问内存中的虚拟数据,但我不明白如何注入它,因为构造函数是内部的。我宁愿不写每个项目中的单元测试。
有什么想法吗?
答案 0 :(得分:3)
您可以使用[InternalsVisibleTo]
属性修饰包含此类的程序集,以使所有内部成员都可以看到单元测试项目。
另一种可能性是使这个构造函数公开,因为这会使类更可重用。通常,DI连接应该在架构的最外层(GUI)中完成,并且对于不同依赖关系的构造函数需要是公共的。这允许在其他项目中重用此DAL层。