类型模拟伪集合处理

本文关键字:处理 集合 模拟 类型 | 更新日期: 2023-09-27 17:49:38

foreach (BeamCluster cluster in executionContext.RevitModel.Beams
                                .Where(b => b.Walls.Values
                                                   .Contains(executionContext.Frame.Wall)))
        {

给定上面的代码片段,我将如何使用类型mock向IEnumerable提供信息,以便我能够为梁、框架和墙壁使用冒名?

Beams是一个字典。

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);