8

我正在尝试开始使用最小起订量,但无法找到任何好的资源来做我需要的事情。

我有一个数据接口类,它有一个通过存储过程返回数据集的 Get 方法。这就是代码的编写方式,我目前无法更改它,因此必须以这种方式完成。

我想通过模拟数据集并返回数据来测试这个类,这样我就不必实际进行数据库调用。

有没有人这样做,如果有的话,从哪里开始做呢?

4

2 回答 2

7

您不需要数据库连接来填充 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。

于 2009-02-23T21:19:50.203 回答
2

我也遇到了上述问题并提出了这个解决方案。我分享它是因为我无法在谷歌上找到任何东西:

[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);
}
于 2018-04-23T05:24:31.127 回答