使用Microsoft Fakes Framework,我正在开展单元测试。但是我遇到了一个问题。我需要伪造一个dbml DataContext。这是Linq to SQL类。
我需要做的是伪造类System.Data.Linq.Table的InsertOnSubmitT0()方法。我想添加param对象以添加到本地字段,而不是将其写入数据库。
我的问题是:如何在运行时在现有类表上添加本地字段 Transports ?像这样:
using (ShimsContext.Create())
{
var shimLinq = new ShimTable<Transport>()
{
//something like this:
//addField("transports", List<Transport>, false);
InsertOnSubmitT0 = (transport) =>
{
Transport t = (Transport)transport;
}
};
}
答案 0 :(得分:1)
一般来说,您无法向现有类型添加内容。 (但是,您可以在运行时创建子类型并添加内容)
在你的情况下,虽然我建议你只使用你在创建垫片时捕获的常规变量,然后可以将该变量作为垫片的一部分返回,并在稍后的描述中阅读
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
无效的银行,并断言代码没有返回任何东西,例如