我正在开发一个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"]);


如何从退货中检索传递给模拟函数的参数?

最佳答案

有关可能的解决方案,请参见here
基本上,您可以在返回函数中使用lambda表达式,并提供“任何”参数。像这样:

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

关于c# - 如何在ASP.NET MVC单元测试的Moq中从模拟返回的值中检索参数的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37025451/

10-12 07:39
查看更多