Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 对数据访问层调用具有依赖关系的方法的单元测试方法_Database_Vb.net_Unit Testing_Data Access Layer - Fatal编程技术网

Database 对数据访问层调用具有依赖关系的方法的单元测试方法

Database 对数据访问层调用具有依赖关系的方法的单元测试方法,database,vb.net,unit-testing,data-access-layer,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 Funct

我使用的代码库没有任何单元测试,我正试图在其中添加一些单元测试。代码是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
公共类FooBar
专用连接字符串为STRING=“”
公共共享函数DoSomething(obj作为对象)作为对象
“这是我想要进行单元测试的方法。
'...
将myLog设置为新日志
myLog.Message=“Foobar”
LogTable.InsertLog(连接字符串,myLog)
返回某物
端函数
末级
公共类日志表
公共共享函数InsertLog(connectionString作为字符串,log作为日志)作为整数
作为新数据库表的Dim db(连接字符串,“tblLog”)
返回db.Insert(日志)
端函数
末级
所以现在我面临着如何测试这些方法的问题。我们有很多方法,比如DoSomething,它们都在传递连接字符串时对数据访问层类进行静态调用

在这种情况下,我能做些什么来避免给数据库打真正的电话?

您应该给数据库打电话。也就是说,使用具有相同接口但不访问数据库的对象。此对象可以是手写的,也可以由。然后,单元测试查询要在中断言的模拟对象是否按预期调用

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