代码之家  ›  专栏  ›  技术社区  ›  lancscoder

用于单元测试sqlcommand扩展方法的方法

  •  1
  • lancscoder  · 技术社区  · 14 年前

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

    public static SqlDataReader ExecuteMyReader( this SqlCommand sqlCommand )
    {
        // Some calculations here
    
        return sqlCommand.ExecuteReader();
    }
    

    我的问题是,单元测试这个扩展方法的最佳方法是什么?

    我应该直接用数据库测试它吗?

    或者我应该尝试创建一个模拟对象吗?如果是这样的话,我试过通过moq来实现这一点,但是由于sqlcommand是一个密封类,所以我似乎无法模仿它。

    3 回复  |  直到 12 年前
        1
  •  2
  •   David Seiler    14 年前

    你能把计算结果提取到他们自己的方法中,并分别进行测试吗?正如您所发现的,在这个粒度级别上为函数编写单元测试既困难又不值得。

        2
  •  2
  •   Finglas    14 年前

    如果您希望测试命令是否确实更新了数据库,那么您将编写一个 integration test . 最好的测试方法是:

    • 建立一个简单的数据库
    • 执行测试
    • 回滚数据库。
    • 重复

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

    唯一一次你想嘲笑这一点的时候是针对那些消耗了你的扩展方法的代码。但是,正如您希望测试扩展方法一样,只有一种方法,那就是实际访问数据库。

        3
  •  0
  •   Tom Cabanski    14 年前

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

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