2015-06-12 67 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

測試所有您的綁定