繁体   English   中英

ADO.NET特定的测试数据集ID模拟

[英]ADO.NET specific test dataset id mocking

我正在使用Microsoft Fakes Framework进行单元测试,以测试用于插入记录的方法。 我有三个类: TransportControllerTestTransportManagerDbController TransportControllerTest是单元测试类。 TransportManager是业务逻辑层的一部分, DbController具有三种方法(插入,获取和删除)。 这些最后的方法使用ADO.NET访问我的数据库。

在我的单元测试中,我想测试TransportController的insert方法。 该控制器两次调用dbControllerdbController.insert()dbController.get() 最后一个调用通过传递用于在第一个调用中插入的参数来给出最后生成的密钥。 因此,在TransportController ,我可以通过调用以下命令访问生成的ID:

    string val = dt.Rows[0]["id"].ToString();
    int id = Int32.Parse(val);

我想模拟上面的值,所以这个表达式是正确的:

    dt.Rows[0]["id"].ToString().Equals("*mocked id*");

我尝试了以下方法:

    DataTable dt = new DataTable(dataSetName);
    dt.Columns.Add("id");
    DataRow dr = dt.NewRow();
    dr.ItemArray.SetValue(1, 0);
    dt.Rows.Add(dr);

    return dt;

但这是行不通的。 如何在测试中使给定的表达式为真?

刚刚检查了一下,您可以在这里伪造什么。

var row = new ShimDataRow().Instance;

ShimDataRowCollection
  .AllInstances
  .ItemGetInt32 = (collection, i) => row;

ShimDataRow
  .AllInstances
  .ItemGetString = (dataRow, s) => "*mocked id*";

您可能还考虑对数据表进行模拟,如果需要的话,可以这样做,因为那样可以避免从垫片获取实例。

这样,您可以完全避免处理System.Data类型,并继续您的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM