c#:为啥当我尝试在模拟中使用合并运算符时它不起作用
Posted
技术标签:
【中文标题】c#:为啥当我尝试在模拟中使用合并运算符时它不起作用【英文标题】:c#:Why when I try to use coalesce operator in a mock it doesn't workc#:为什么当我尝试在模拟中使用合并运算符时它不起作用 【发布时间】:2021-04-02 17:40:33 【问题描述】:为什么当我尝试使用这样的模拟时:
public void Test(string param=null)
MyMock.Setup(x=>x.foo(param ?? It.IsAny<string>));
这显然工作正常
public void Test(string param=null)
if(param==null)
MyMock.Setup(x=>x.foo(It.IsAny<string>));
else
MyMock.Setup(x=>x.foo(param));
但这是为什么呢? "param ?? It.IsAny" 返回 param 或 It.IsAny 我在这里缺少什么?
我看到了this 和this,但还是不明白。
【问题讨论】:
不确定这是否有帮助,因为我不使用起订量,但我尝试了以下操作,它按预期合并: List在 Moq 中设置 Mock 时,您实际上传递的不是函数参数的值(例如,tpye T
),而是 Expression<T>
,然后由 Moq
分析。
因此,当您传递值时,Moq
将对其进行分析并为使用该值的方法调用设置期望。
当你通过It.IsAny<T>
Moq
将再次对其进行分析并设置期望,而无需任何参数。
但是当你传递你的param ?? It.IsAny<string>
Moq
根本不知道如何分析它。
【讨论】:
同时我玩了它,发现如果我只是插入这样的函数:'FuncMyMock.Setup(x=>x.foo(param==null ? It.IsAny<string>:param));
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。 试过了,没用,就像 DonaldDuck 说的我想了解原因。以上是关于c#:为啥当我尝试在模拟中使用合并运算符时它不起作用的主要内容,如果未能解决你的问题,请参考以下文章
当我使用 ListView 时,ListTile OnTap 正在工作。但是当我使用 ListWheelScrollView 它不起作用
当我尝试用 makefile 编译我的 qt 程序时它不起作用