我正在使用 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/