如何伪造OLEDB.OleDBDataAdapter来填充OleDBDataAdapter.Fill(dataSet)来使用NUnit来修补单元测试的结果

时间:2014-06-17 15:39:53

标签: vb.net unit-testing nunit oledbconnection microsoft-fakes

我一直在解决一个问题,我无法修改OLEDBDataAdapter的.Fill方法。我编写了一个函数来查询DB以返回结果表。如果查询没有返回结果,那么这是一个错误(在我的函数的上下文中是一个有效的错误)。

该功能已经过彻底测试,工作正常。当我尝试编写单元测试来测试此功能时,问题就来了。为了正确地执行它,我需要填充Fill方法以返回具有非空数据表列表的数据集。垫片功能本身非常简单,但我无法达到它。

当我尝试为OledDbDataAdapter.Fill方法设置委托时,我所拥有的唯一假对象是OleDbDataAdapter.FillDataSetObjectString这是正确的函数,但它只有一个我没有使用的可用重载。我只是希望能够将数据集传递给fill方法,但委托所需的签名包括ADODB记录集和源表名。在这一点上使用这些对象将是一个重要的重构,我宁愿能够使用正常运行的生产代码AS-IS。

请注意,我已尝试重载委托并将空对象或空引用传入Fill方法,但没有成功。

网络搜索在这一点上非常缺乏帮助。任何有关此问题的帮助将不胜感激。

这里要求的是相关代码的样本,

Function GetTable(adapter as OleDb.OleDbDataAdapter,con As OleDb.OleDbConnection) as DataTable

dim selectCmd as OleDb.OleDbCommand = con.CreateCommand()
sleectCmd.CommandText = "Select * from Table"
adapter.SelectCommand = selectCmd

dim ds as new DataSet
adapter.Fill(ds)

if ds.tables.count = 0 then
'Throw exception
End if

return ds.tables(0)
End Function
'

以下是我在单元测试中使用的代码,

Dim con As New OleDb.Fakes.ShimOleDbConnection()
con.CreateCommand = AddressOf ShimCreateCommand
Dim adapter As New OleDb.Fakes.ShimOleDbDataAdapter

adapter.FillDataSetObjectString = AddressOf ShimAdapterFill

Using dataStore As New DataStore()
    dataStore.GetTable(con, adapter)
End Using

0 个答案:

没有答案