2015-06-12 66 views
0

我有一个ASP.NET MVC应用程序,它具有用于依赖注入的NInject容器。正如所宣称的,IoC使我能够轻松地单独测试组件,然后在应用程序中轻松组成组件。如何测试DI(NInject)的使用

我想测试我对DI的使用。我不想测试DI组件是否正常工作。我相信NInject的人很好。我想测试一下,我是否已经使用DI根据应用程序的意图正确组成组件。我不想测试NInject,我想测试我对NInject的使用。 (我也不想试图将它作为单元测试或集成测试进行分类,我只想在开始生产之前能够证明为什么我有信心使用NInject工作。)

假设我有这样的:

private static void RegisterDatabaseConnections(IBindingRoot kernel) 
    { 
     string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     kernel.Bind<IProvideDbConnections>() 
      .To<Connector>() 
      .WhenInjectedInto<ActivityStore>() 
      .WithConstructorArgument("connectionString", connectionString); 
     kernel.Bind<IProvideDbConnections>() 
      .To<Connector>() 
      .WhenInjectedInto<CrConnector>() 
      .WithConstructorArgument("connectionString", connectionString); 
     kernel.Bind<IProvideDbConnections>() 
      .To<CrConnector>() 
     ... 
    } 

某处,我有:

public class Writer 
    { 
     public Writer(IProvideDBConnections connector) 
     { 
      Connector = connector; 
     } 
     private IProvideDBConnections Connector { get; set; } 
     .... 
    } 

我想编写一个像MSTest的

[TestMethod] 
    public void TestThatWriterCrConnectorContainsConnector() 
    { 
     ... 
    } 

这样我可以验证我写RegisterDatabaseConnections给我什么我期望的。我很难开始使用这个路径,因为我不知道要访问内核来设置任何测试。在应用程序中启动内核的代码是静态私有方法的集合,对我来说有点神秘,而且我没有看到我会如何在测试环境中执行此操作。任何帮助?

回答

0

我会创建我自己的内核和Load()您想要测试的模块。

[TestMethod] 
public void TestThatWriterCrConnectorContainsConnector() 
{ 
    var kernel = new StandardKernel(); 
    kernel.Load(new ModuleA(), new ModuleB()); 

    var obj = kernel.Get<Writer>(); 
    // ... assert 
} 

这是假设你已经定义了要在NinjectModule

测试所有您的绑定