Skip to main content
 首页 » 编程设计

c#之Typemock 假集合处理

2024年01月01日35落叶无声

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(通常通过返回所有内容的默认值)。这只能防止空引用异常,对很多测试用例来说用处不大。

因此,您需要做的就是更改上下文返回的内容。

var myFakeBeams = new List<Beam>(); 
//Add a bunch of fake beams 
Isolate.WhenCalled(() => context.RevitModel.Beams).WillReturn(myFakeBeams); 

其他类型依此类推。