使用Ninject解析Asp.Net MVC单元测试中的Controller构造函数依赖项

时间:2011-11-28 13:50:24

标签: asp.net-mvc ninject

我不确定如何在单元测试中使用Ninject自动解析控制器的构造函数依赖项。

在我的实际应用程序中,我在我的gloabl.asax中设置了依赖注入,如下所示:

public void SetupDependencyInjection()
    {
        IKernel kernel = new StandardKernel();

        kernel.Bind<ISomeService>().To<SomeService>();

        DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
    }

我有一个带构造函数的控制器:

public SomeController (ISomeService someService)

这一切都很好,不知何故神奇地SomeController构造函数被someService作为参数调用。我不知道如何在我的单元测试中复制这种行为。也就是说,我想配置我的单元测试,这样我就不必通过构造函数自己创建控制器 - 我希望ninject能够像在实际应用程序中那样完成它。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

我不知道如何在我的单元测试中复制这种行为,但

在单元测试中,您可以使用模拟框架(例如Rhino MocksMoq)为依赖项生成模拟对象并定义对它们的期望。

Rhino Mocks示例:

[TestMethod]
public void Test_Something()
{
    // arrange
    var serviceMock = MockRepository.GenerateStub<ISomeService>();
    serviceMock.Stub(x => x.SomeMethod(123)).Return("foo bar");
    var sut = new SomeController(serviceStub);

    // act
    var actual = sut.SomeAction();

    // assert
    // TODO: assert on the result
}