foreach (BeamCluster cluster in executionContext.RevitModel.Beams
.Where(b => b.Walls.Values
.Contains(executionContext.Frame.Wall)))
{
给定上面的代码,我将如何使用模拟类型将信息输入到IEnumerable中,从而使梁,框架和墙壁也能使用伪造品?
梁是一本字典。
executionContext的类型为TooLongContext
TooLongContext context = Isolate.Fake.Instance<TooLongContext>(Members.ReturnRecursiveFakes);
Isolate.WhenCalled(() => context.RevitModel.Beams).ReturnRecursiveFake();
在这之后我很困惑(也许在此之前我很困惑:))
最佳答案
您需要首先创建一个由梁和墙等组成的IEnumerable。 Typemock(和其他模拟框架)不会自动生成有用的数据。当您让它们返回递归伪造品时,它所要做的就是尝试确保没有返回任何带有null的东西(通常通过返回所有内容的默认值)。那只能防止null引用异常,并且对于许多测试用例没有太大用处。
因此,您要做的就是更改上下文返回的内容。
var myFakeBeams = new List<Beam>();
//Add a bunch of fake beams
Isolate.WhenCalled(() => context.RevitModel.Beams).WillReturn(myFakeBeams);
对于其他类型,依此类推。