asp.net-mvc-3 - Mvc3 中的 Moq 包中的 Assert.IsInstanceOfType 失败

标签 asp.net-mvc-3 moq

我正在使用 Moq 包来测试 Controller 。 HomeController.cs

public class HomeController : Controller
{  readonly IPermitRepository _repository;
    public HomeController(IPermitRepository rep)
    {            this._repository = rep;        }

    public ViewResult Index()
    {
        ViewBag.Message = "Hello World";
        PermitModel model = _repository.GetPermitDetails();
        return View(model);
    }
}

在 HomeControllerTest.cs 中

 [TestClass]
 Public class HomeControllerTest
{
    [TestMethod]
    public void Index()
    {       
        var messagingService = new Mock<IPermitRepository>();
        var controller = new HomeController(messagingService.Object);

        var result = controller.Index() as ViewResult;
       Assert.IsInstanceOfType(result.Model, typeof(PermitModel));
    }
}

但是它给出了错误。 Assert.IsInstanceOfType 失败。预期类型:.实际类型:<(null)>.

有人可以提供解决方案以及一些有关 MVC3 中 Moq 包的信息吗? 提前致谢

最佳答案

对于每个非 void 方法调用,Moq 默认返回 null

因此,当您在 Controller 中调用 _repository.GetPermitDetails(); 时,它会返回 null,这就是您的测试失败的原因。

您需要在方法上调用 Setup 来返回某些内容:

var messagingService = new Mock<IPermitRepository>();
messagingService.Setup(m => m.GetPermitDetails()).Returns(new PermitModel());
var controller = new HomeController(messagingService.Object);

您可以在 Moq quickstart 中找到更多信息关于如何自定义模拟行为。

关于asp.net-mvc-3 - Mvc3 中的 Moq 包中的 Assert.IsInstanceOfType 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739017/

相关文章:

asp.net-mvc - MVC 3 文件上传和模型绑定(bind)

asp.net-mvc - ASP.NET MVC 3 路由参数中的点字符

c# - 我应该使用回调还是引入公共(public)字段来帮助进行单元测试?

asp.net-mvc-3 - ASP.Net MVC 3 Razor 连接字符串

javascript - 如何在 MVC3 模式中调用 javascript

c# - 最小起订量问题 - 仅在构建服务器 (TeamCity) 上

c# - 如何模拟在另一个方法中调用的方法?

c# - 如何在没有扩展/贡献的情况下自动模拟最小起订量中的容器(例如 IList)

c# - User.Identity.Name 被模拟后返回 null

asp.net - 如何使用 ASP.NET 成员身份安全地存储服务密码?