【问题标题】:Why does Moq throw TargetParameterCount exception为什么 Moq 会抛出 TargetParameterCount 异常
【发布时间】:2015-04-03 08:43:20
【问题描述】:

有人知道为什么我在尝试模拟我的帐户控制器登录方法时遇到此异常吗?

这是起订量代码:

[TestMethod]
public void Can_Validate_User()
{
    // Arrange
    Mock<IAccountService> mockAccountService = new Mock<IAccountService>();

    mockAccountService.Setup(m => m.Login(It.Is<string>(userName => userName == "Samuel"),
                                          It.Is<string>(password => password == "password")))
                                          .Returns<bool>(b => true);

    AccountController target = new AccountController(mockAccountService.Object);

    // Act
    RedirectResult result1 = (RedirectResult)target.Login("Samuel", "password");
    //RedirectResult result2 = (RedirectResult)target.Login("RK", "password");
    //RedirectResult result3 = (RedirectResult)target.Login("Tatiana", "password");

    // Assert
    Assert.AreEqual(result1, "~/DashBoard/Cases");
    //Assert.AreEqual(result2, "~/DashBoard/Cases");
    //Assert.AreEqual(result3, "~/DashBoard/Cases");
} 

在我的 AccountController/Login 操作中,它在这一行崩溃:

bool loginValid = _accountService.Login(userName, password);

_accountService 使用 DI 设置,带有 IAccountService 实例,mock.object。

public interface IAccountService
{
    bool Login(string userName, string password);
}

【问题讨论】:

    标签: moq


    【解决方案1】:

    考虑到this answer,我认为你的Setup方法的Return部分,应该与接口方法的签名相同:

    mockAccountService.Setup(m => m.Login(It.Is<string>(userName => userName == "Samuel"),
                                              It.Is<string>(password => password == "password")))
                                              .Returns<bool>((u,p) => true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多