c# - 如何在 ASP.NET MVC 单元测试中从 Moq 中的模拟返回中检索参数值

标签 c# asp.net asp.net-mvc unit-testing moq

我正在开发一个 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寻求可能的解决方案。
基本上,您可以在 Returns 函数中使用 lambda 表达式,提供“Any”参数。像这样:

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/

相关文章:

asp.net-mvc - Controller 或型号 : who should implement business methods in MVC?

c# - 如何将一组节点划分为子集,每个子​​集形成有向无环图

asp.net - 如何在 ASP.NET MVC 5.1.2 OWIN 中以编程方式验证用户或进行身份验证

c# - 逐字输出字符串属性以防止双重编码

asp.net - 带有 IE8 问题的 ASP gridview 中的按钮

c# - Visual Studio 网站在调试时将 http 重定向到 https

javascript - 将 "Id"选定的复选框传递给模态 Bootstrap 并发送到 Controller

asp.net - 新的 Asp.Net MVC5 项目产生登录页面的无限循环

c# - 使用 SignalR 2 和 MVC 4.0 从服务器向特定客户端发送消息不起作用

C# 从字符串创建 cookie 并发送它