我为SqlCommand创建了一个扩展方法,在执行命令之前允许一些额外的工作:
public static SqlDataReader ExecuteMyReader( this SqlCommand sqlCommand )
{
// Some calculations here
return sqlCommand.ExecuteReader();
}
我的问题是对这种扩展方法进行单元测试的最佳方法是什么?
我应该直接针对数据库进行测试吗?
或者我应该尝试创建一个模拟对象?如果是这种情况我试过通过Moq这样做,但由于SqlCommand是一个密封的类,我似乎无法模仿它。
答案 0 :(得分:2)
如果您希望测试该命令实际上是否更新了数据库,那么您将编写integration test。那么测试它的最佳方法是:
这很好,因为这就是你关心的。如果这是嘲笑(没有意义),你会测试什么?你怎么知道它有效?
您希望模仿此操作的唯一时间是使用扩展方法的代码。但是,当您希望测试扩展方法时,只有一种方法,那就是实际命中数据库。
答案 1 :(得分:2)
您可以将计算结果用于自己的方法并单独测试吗?正如您所发现的那样,在这种粒度级别上编写函数的单元测试很困难而且没有用。
答案 2 :(得分:0)
你说你不能测试整个方法是对的。
我不知道你的计算的性质,但如果它们可以拆分成另一个函数,那么该函数可以进行单元测试。这将有助于确保我假设的计算是您的实现的核心,正常工作。