单元测试方法,调用具有数据访问层依赖性的方法

时间:2010-03-04 05:58:30

标签: database vb.net unit-testing data-access-layer

我在没有任何单元测试的代码库上工作,我正在尝试添加一些单元测试。代码是VB.NET,但不是面向对象的。我们正在使用NUnit进行单元测试。很多类都有共享/静态方法。

我正在尝试对调用其他使用数据访问层的方法的方法进行单元测试。所以我的代码如下所示:

Public Class FooBar
    Private CONN_STRING As String = "<Connection String Goes Here>"

    Public Shared Function DoSomething(obj As Object) As Object
        'This is the method I want to unit test.
        '...

        Dim myLog As New Log
        myLog.Message = "Foobar"
        LogTable.InsertLog(CONN_STRING, myLog)

        Return someObject
    End Function
End Class


Public Class LogTable
    Public Shared Function InsertLog(connectionString As String, log As Log) As Integer
       Dim db As New DBTable(connectionString, "tblLog")
       Return db.Insert(log)
    End Function
End Class

所以现在我面临着弄清楚如何测试这些方法的问题。我们有很多方法,比如DoSomething,它们都会在传递连接字符串的同时对数据访问层类进行静态调用。

在这种情况下,我可以做些什么来避免真正调用数据库?

1 个答案:

答案 0 :(得分:2)

你应该mock数据库。也就是说,使用具有相同接口但不访问数据库的对象。该对象可以手写,也可以由mock framework生成。单元测试然后查询模拟对象以按预期调用断言。

然后让你的测试类调用mock DB类的实例,而不是实际的DB对象;这种技术称为dependency injection:您可以将模拟对象传递给被测试的类,也可以依赖Factory返回正确的类实例,具体取决于在生产中进行单元测试或执行的代码。