2

我正在使用 Moq 包来测试控制器。家庭控制器.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 包的一些信息吗?提前致谢

4

1 回答 1

2

Moqnull默认为每个非 void 方法调用返回。

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

你需要调用Setup你的方法来返回一些东西:

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

您可以在Moq 快速入门中找到有关如何自定义模拟行为的更多信息。

于 2012-05-24T14:48:19.557 回答