簡體   English   中英

c#:為什么當我嘗試在模擬中使用合並運算符時它不起作用

[英]c#:Why when I try to use coalesce operator in a mock it doesn't work

為什么當我嘗試使用這樣的模擬時:

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 我在這里缺少什么?

我看到了這個這個,但我仍然不明白。

在 Moq 中設置 Mock 時,您實際上傳遞的不是 function 參數的值(例如 tpye T ),而是一個Expression<T> ,然后由Moq分析。
因此,當您傳遞值時, Moq將對其進行分析並為使用該值的方法調用設置期望。
當您通過It.IsAny<T>時, Moq將再次對其進行分析並設置預期,而無需任何 arguments。
但是當你傳遞你的param?? It.IsAny<string> param?? It.IsAny<string> Moq根本不知道如何分析它。

MyMock.Setup(x=>x.foo(param==null ? It.IsAny<string>:param));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM