[英]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.