Mvc3中的Moq包中的Assert.IsInstanceOfType失败

时间:2012-05-24 14:02:01

标签: 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失败。预期类型:实际类型:&lt;(null)&gt;。

有些人可以提供解决方案,也可以提供一些关于MVC3中Moq包的信息。 提前致谢

1 个答案:

答案 0 :(得分:2)

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

因此,当您在控制器中调用_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中找到有关如何自定义模拟行为的更多信息。