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

Смежные вопросы