我使用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包的信息。 提前致谢
答案 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中找到有关如何自定义模拟行为的更多信息。