0

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

在我的单元测试中,我想测试TransportController. 此控制器调用dbController两次:dbController.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;

但这不起作用。如何使给定的表达式在我的测试中为真?

4

1 回答 1

1

刚刚检查了你可以在这里伪造什么。

var row = new ShimDataRow().Instance;

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

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

如果需要,您还可以考虑模拟数据表等,因为这样可以避免从 shim 获取实例。

这样你就完全避免了处理 System.Data 类型,并继续你的逻辑。

于 2013-10-04T17:50:37.993 回答