在运行时添加字段 - 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;
}
};
}
一般来说,您无法向现有类型添加某些内容。(但是,您可以在运行时创建一个子类型并向其添加内容(
在您的情况下,虽然我建议只使用您在创建填充程序时捕获的常规变量,但您可以将该变量作为填充程序的一部分返回,并在以后根据您的描述阅读它
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
,并断言代码不返回任何内容