在运行时添加字段 - Microsoft Fakes 框架

本文关键字:Microsoft Fakes 框架 字段 运行时 添加 | 更新日期: 2023-09-27 18:34:57

使用Microsoft Fakes框架,我正在研究单元测试。但我提出了一个问题。我需要伪造一个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;
                    }
                };
             }

在运行时添加字段 - Microsoft Fakes 框架

一般来说,您无法向现有类型添加某些内容。(但是,您可以在运行时创建一个子类型并向其添加内容(

在您的情况下,虽然我建议只使用您在创建填充程序时捕获的常规变量,但您可以将该变量作为填充程序的一部分返回,并在以后根据您的描述阅读它

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

在您提到的填充TransportsGet的评论中,您可以以相同的方式执行此操作,只需在该填充程序中返回thelist。然后,您可以在测试结束时对thelist变量执行断言。

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