gpt4 book ai didi

c# - 使用 moq 验证对带有 param 参数的函数的调用

转载 作者:可可西里 更新时间:2023-11-01 08:07:55 25 4
gpt4 key购买 nike

我有一个带有 LogTrace(string value, params object[] parameters) 的 ILogger 接口(interface)。现在我想验证是否调用了 LogTrace 并且要记录的字符串包含一些 id。问题是它可以被不同地调用。例如。1) LogTrace("MyString"+ id)2) LogTrace("MyString {0}", id)等等。

Moq 有没有好的方法来验证所有的场景?我只能考虑创建一个手工制作的模拟来格式化可用于验证的字符串。

最佳答案

mock.Verify( m => m.LogTrace( It.IsAny<string>(), It.IsAny<object[]>() ) );

params object[] 无论如何都会作为 object[] 传递给方法,因此您只需要以某种方式匹配数组(例如,如上所述,它接受任何内容).

如果您需要对列表进行更多控制,请使用 It.Is 匹配器,它允许您创建自己的谓词:

 mock.Verify( m => m.LogTrace( It.IsAny<string>(),
It.Is<object[]>(ps =>
ps != null &&
ps.Length == 1 &&
ps[0] is int &&
(int)ps[0] == 5
) ) );

此示例说明如何验证参数列表是否不为空并且是否包含 5 作为 int 类型的唯一参数。

关于c# - 使用 moq 验证对带有 param 参数的函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com