我正在考虑使用Mock Object模式对我的应用程序中的层进行单元测试。我面临的问题是如何在不进行单元测试时从模拟对象切换到真实对象。
我最初的反应是引用两个库(一个包含真实对象,一个包含模拟),并使用conditional compilation symbols在两个名称空间之间切换。然而,这显然要求在没有UNITTEST
符号的情况下重建项目(在通过单元测试之后),以便重新引用真实对象。
是否有任何模式可以实现这一目标?
仅供参考,如果能提供任何好处,我的环境就是c#2。
答案 0 :(得分:7)
您需要查找dependency injection以及对象通过构造函数接受其依赖项的方式,而不是自己创建它们。
例如,对比:
public MyClass()
{
myDBConnection = new SqlConnection();
}
VS
public MyClass(IDbConnection connection)
{
myDBConnection = connection;
}
在第二个中,您可以在单元测试中传递模拟数据库连接,在真实代码中传递真实内容。