单元测试SqlCommand扩展方法的方法

时间:2010-04-19 13:31:26

标签: c# unit-testing mocking extension-methods moq

我为SqlCommand创建了一个扩展方法,在执行命令之前允许一些额外的工作:

public static SqlDataReader ExecuteMyReader( this SqlCommand sqlCommand )
{
    // Some calculations here

    return sqlCommand.ExecuteReader();
}

我的问题是对这种扩展方法进行单元测试的最佳方法是什么?

我应该直接针对数据库进行测试吗?

或者我应该尝试创建一个模拟对象?如果是这种情况我试过通过Moq这样做,但由于SqlCommand是一个密封的类,我似乎无法模仿它。

3 个答案:

答案 0 :(得分:2)

如果您希望测试该命令实际上是否更新了数据库,那么您将编写integration test。那么测试它的最佳方法是:

  • 设置简单数据库
  • 执行测试
  • 回滚数据库。
  • 重复

这很好,因为这就是你关心的。如果这是嘲笑(没有意义),你会测试什么?你怎么知道它有效?

您希望模仿此操作的唯一时间是使用扩展方法的代码。但是,当您希望测试扩展方法时,只有一种方法,那就是实际命中数据库。

答案 1 :(得分:2)

您可以将计算结果用于自己的方法并单独测试吗?正如您所发现的那样,在这种粒度级别上编写函数的单元测试很困难而且没有用。

答案 2 :(得分:0)

你说你不能测试整个方法是对的。

我不知道你的计算的性质,但如果它们可以拆分成另一个函数,那么该函数可以进行单元测试。这将有助于确保我假设的计算是您的实现的核心,正常工作。

相关问题