簡體   English   中英

如何在 ASP.NET MVC 單元測試中從 Moq 中的模擬返回中檢索參數值

[英]How to retrieve value of parameters from returns of mock in Moq in ASP.NET MVC unit test

我正在開發一個 ASP.NET MVC 項目。 我正在對每個組件進行單元測試。 我正在使用 Moq 來模擬我的存儲庫。 但是我在模擬函數時遇到了問題。

這是我的測試方法:

[TestMethod]
public void Cannot_Edit_If_Invalid_Region()
{
      Region[] regions = { 
                             new Region{
                                  Id = 1,
                                  Name = "Test 1"
                             },
                              new Region{
                                   Id = 3,
                                   Name = "Test 3"
                              },
                              new Region{
                                  Id = 4,
                                  Name = "Test 4"
                              }
                          };

    Mock<IRegionRepo> mock = new Mock<IRegionRepo>();
    mock.Setup(m=>m.Region(It.IsAny<int>())).Returns(regions[It.IsAny<int>()]); // problem is here
}

正如你在上面的代碼中看到的,我評論了問題所在。 實際上,我想要模擬的是我將一個參數傳遞給函數,然后返回將通過作為數組索引傳遞給函數的參數檢索其中一個區域。

這是我想要的想法:

mock.Setup(m=>m.Region("parameter passed").Returns(regions["parameter passed"]);

如何從返回中檢索傳遞給模擬函數的參數?

請參閱此處以獲取可能的解決方案。
基本上,您可以在 Returns 函數中使用 lambda 表達式,提供“任何”參數。 像這樣:

mock.Setup(m=>m.Region(It.IsAny<int>())).Returns((int x) => regions[x]);

像這樣的東西:

Region[] regions = {
                    new Region{
                        Id = 1,
                        Name = "Test 1"
                    },
                    new Region{
                        Id = 3,
                        Name = "Test 3"
                    },
                    new Region{
                        Id = 4,
                        Name = "Test 4"
                    }
                };
Mock<IRegionRepo> mock = new Mock<IRegionRepo>();
mock.Setup(x => x.Region(It.IsAny<int>())).Returns<int>((i) => regions[i]);

Assert.AreEqual(mock.Object.Region(1), regions[1]);

暫無
暫無

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

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