【问题标题】:IdependencyResolver is always null in unit test using moqIdependencyResolver 在使用 moq 的单元测试中始终为空
【发布时间】:2015-05-08 12:33:00
【问题描述】:

我已经在一个 mvc 项目中实现了 ninject,现在它按预期工作,我想进行单元测试,但似乎无法让它工作:

控制器:

 private IDependencyResolver _resolver;

 public HomeController(IDependencyResolver resolver)
 {
        _resolver = resolver;
 }

  public ActionResult Index()
  {
        var model = _resolver.GetService<ISignUpViewModel>();
        return PartialView("Login", model);
  }

单元测试

    private IDependencyResolver _resolverMock;

    [TestMethod]
    public void SignUpTest()
    {

        var ctrl = new HomeController(_resolverMock);
        var signUpMock = new Mock<ISignUpViewModel>();

        ctrl.Index();
        ctrl.ViewData.Model = signUpMock;

        //Assert.AreEqual("", "");

    }

解析器始终为空。

我看过 Ninject.MockingKernel.Moq 我应该在里面设置解析器吗?

知道我哪里出错了吗?

谢谢

【问题讨论】:

  • 你有没有初始化过_resolverMock
  • 它为null的原因是因为您从未将其设置为非null。

标签: asp.net-mvc unit-testing moq


【解决方案1】:

在单元测试中你手动创建HomeController 实例,所以你需要模拟IDependencyResolver。例如:

var resolverMock = new Mock<IDependencyResolver>();
var ctrl = new HomeController(resolverMock.Object);
....

【讨论】:

  • 我收到错误:无法将类型“Moq.Mock”隐式转换为“System.Web.Mvc.IDependencyResolver”。存在显式转换(您是否缺少演员表?)
  • 很好,它现在可以工作了。谢谢通过它作为resolverMock.object。
  • @Tau7 使用moq也可以mock一些动作,可以阅读这个文档:github.com/Moq/moq4/wiki/Quickstart
  • 快速提问:你在单元测试中使用的每个接口都必须被模拟吗?
  • @Tau7 这取决于你。您可以设置一些实现接口的类型实例。但我认为使用 moq 是更好的解决方案。
猜你喜欢
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2011-12-24
  • 2015-10-04
  • 1970-01-01
相关资源
最近更新 更多