如何在Moq中验证参数?编写测试用例遇编译错误求助
问题分析与修复
你的这条Verify语句确实存在错误,直接导致了编译报错:
错误原因
Moq的Verify方法返回类型是void(无返回值),所以根本不能在它后面链式调用.Returns()——这就是编译器提示“无法将“.”应用于“void”类型的操作数”的原因。
而且你的用法逻辑也错了:.Returns()是用来在Setup阶段定义模拟方法的返回值,而Verify是用来验证方法是否被按预期调用,两者的作用场景完全不同。
正确写法
如果你要验证OpenTicket方法被调用时传入的参数符合指定条件,应该用Moq的参数匹配器It.Is<T>()来实现,把参数验证逻辑写在Verify的表达式里:
// 验证OpenTicket方法被调用过,且传入的参数符合预期条件 _testDomain.Verify(x => x.OpenTicket(It.Is<OpenTicketRequest>(req => req.phone.ID == _request.phone.ID && req.ActiveContract.IDnumber == _request.ActiveContract.IDnumber)), Times.Once); // 可选:指定调用次数,比如至少一次/恰好一次等
另外提个小细节:你前面Setup里写的是x.OpenTicketing(null),后面Verify的是x.OpenTicket(null),方法名差了个“ing”,如果不是笔误的话,要注意保持接口方法名一致。
内容的提问来源于stack exchange,提问作者Alex Dave
相关产品推荐
相关产品推荐

