我正在尝试开始使用最小起订量,但无法找到任何好的资源来做我需要的事情。
我有一个数据接口类,它有一个通过存储过程返回数据集的 Get 方法。这就是代码的编写方式,我目前无法更改它,因此必须以这种方式完成。
我想通过模拟数据集并返回数据来测试这个类,这样我就不必实际进行数据库调用。
有没有人这样做,如果有的话,从哪里开始做呢?
我正在尝试开始使用最小起订量,但无法找到任何好的资源来做我需要的事情。
我有一个数据接口类,它有一个通过存储过程返回数据集的 Get 方法。这就是代码的编写方式,我目前无法更改它,因此必须以这种方式完成。
我想通过模拟数据集并返回数据来测试这个类,这样我就不必实际进行数据库调用。
有没有人这样做,如果有的话,从哪里开始做呢?
您不需要数据库连接来填充 DataSet。你可以像这样模拟它:
IDataInterface di = new Mock<IDataInterface>();
DataSet mockDataSet = CreateMockDataSet();
di.Expect(x => x.Get()).Returns(mockDataSet);
something.UseDataInterface(di.Object);
但是,填充模拟 DataSet 是相当痛苦的。如果我这样做,我一般会在返回的DataSet前面放一个facade interface,这样更容易mock。或者我把代码改成使用DataTable,这样更容易填写。
或者,为您的单元测试使用嵌入式数据库,例如 SQLite 或 SQL Server CE。
我也遇到了上述问题并提出了这个解决方案。我分享它是因为我无法在谷歌上找到任何东西:
[TestCategory("GetDataSet")]
[TestMethod]
public void GetDataSet_ValidCall_ShouldPass()
{
// Arrange
var dataSet = Builder<DataSet>.CreateNew().Build();
DataTable table1 = new DataTable();
table1.Columns.Add("Id", typeof(int));
table1.Columns.Add("Name", typeof(string));
table1.Rows.Add("1", "Name1");
DataTable table2 = new DataTable();
table2.Columns.Add("More", typeof(bool));
table2.Rows.Add(false);
dataSet.Tables.Add(table1);
dataSet.Tables.Add(table2);
objectWhichHaveProcMethod.Setup(elem => elem.ExecuteProcAndGetDataSet("YourSprocName", It.IsAny<SqlParameter>(), It.IsAny<SqlParameter>())).Returns(dataSet);
// Act
var response = dataInterfaceClass.Get();
// Assert
Assert.AreNotEqual(response, null);
}