我一直在解决一个问题,我无法修改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