0

我正在使用Microsoft Fakes Framework进行单元测试。但是我遇到了一个问题。我需要伪造一个 dbml DataContext。这是 Linq to SQL 类。

我需要做的是伪造 System.Data.Linq.Table 类的方法 InsertOnSubmitT0()。我想添加要添加到本地字段的参数对象,而不是将其写入数据库。

我的问题是:如何在现有类表上添加运行时本地字段传输?像这样的东西:

using (ShimsContext.Create())
            {
                var shimLinq = new ShimTable<Transport>()
                {
                    //something like this:
                    //addField("transports", List<Transport>, false);
                    InsertOnSubmitT0 = (transport) =>
                    {
                        Transport t = (Transport)transport;
                    }
                };
             }
4

1 回答 1

1

一般来说,您不能向现有类型添加内容。(但是,您可以在运行时创建一个子类型并向其中添加内容)

在您的情况下,尽管我建议仅使用您在创建 shim 时捕获的常规变量,然后您可以将该变量作为您的 shim 的一部分返回并稍后在您的决定中读取它

var thelist = new List<Transport>(); //fill out whatever test data you want here, in the case of TransportsGet
using (ShimsContext.Create())
  {
    var shimLinq = new ShimTable<Transport>()
    {
      InsertOnSubmitT0 = (transport) =>
      {
        Transport t = (Transport)transport;
        thelist = t.Transports; // assign your outer variable, or do the asserts directly
      }
    };
  }
// do assertions on thelist here

在您提到 shiming 的评论中TransportsGet,您可以以相同的方式执行此操作,然后返回thelist该 shim。然后你可以thelist在测试结束时对变量进行断言。

但是,如果您想测试一个.Where不会直接显示在实际列表中的语句,则必须以其他方式对其进行测试。例如,您可以thelist使用无效的银行并断言代码不返回任何内容

于 2013-10-11T10:09:43.640 回答