我有一个对象使用Excel文件读取数据,这需要使用IDbConnection
,IDbDataAdapter
和IDbCommand
。我使用的适配器填充方法来填充数据的表格,这是我当前如何嘲笑它:使用Moq模拟IDbDataAdapter填充方法
[TestCase]
public void TestReadCellsFromSpreadsheetReadsSuccessfully()
{
var cells = new List<ReportData>
{
new ReportData { CellId = 1, ExcelCellLocation = "A1"},
new ReportData { CellId = 2, ExcelCellLocation = "A2"},
new ReportData { CellId = 3, ExcelCellLocation = "A3"},
new ReportData { CellId = 4, ExcelCellLocation = "A4"}
};
_mockAdapter.Setup(a => a.Fill(It.IsAny<DataSet>()))
.Callback((DataSet ds) =>
{
if (ds.Tables["Table"] == null)
{
ds.Tables.Add("Table");
ds.Tables["Table"].Columns.Add(new DataColumn());
}
var row = ds.Tables["Table"].NewRow();
row[0] = "Test";
ds.Tables["Table"].Rows.Add(row);
});
var excelReader = new ExcelReader(_mockConnection.Object, _mockAdapter.Object, _mockCommand.Object);
excelReader.ReadCellsFromSpreadsheet("Deal Summary", cells);
_mockCommand.VerifySet(c => c.CommandText = It.IsAny<string>(), Times.Exactly(cells.Count));
_mockAdapter.VerifySet(a => a.SelectCommand = _mockCommand.Object, Times.Exactly(cells.Count));
_mockAdapter.Verify(a => a.Fill(It.IsAny<DataSet>()), Times.Exactly(cells.Count));
}
这个实现的作品,但我觉得我做得太多嘲笑适配器.. 。 有一个更好的方法吗?
'[TestCase]'用于NUnit,'[Test]'用于Visual Studio测试。另外,我正在为每列创建一个命令,因为我正在根据映射选择特定的单元格。数据不是表格,因此我必须采取个别单元格。 – shuniar
不正确。 [测试]适用于NUnit。 [TestCase]是NUnit中的参数化测试。但是你不通过任何参数。 –