Интеграционный тест с Ninject

Я знаком с тем фактом, что я не должен использовать внедрение зависимостей в модульных тестах, поэтому я могу проводить модульное тестирование каждого слоя независимо.

Тем не менее, я хочу создать интеграционные тесты для своих контроллеров. Поэтому мне нужно внедрить свои репозитории в контроллеры из модульного теста.

Я использую общий подход с использованием сценария T4, который создает тестовый класс для каждого контроллера, содержащий тестовый метод для каждого ActionResult. Этот тестовый метод должен просто вызывать метод, чтобы убедиться, что исключения не выбрасываются на поверхность.

Из-за использования этого скрипта T4 я не могу вручную загружать репозитории в контроллеры. Мне нужно использовать внедрение зависимостей.

Исходя из моего предыдущего опыта, это должно работать, но я продолжаю получать сообщение об ошибке:

Unable to get default constructor for class <<UnitTest>>

Мои сгенерированные классы выглядят на данный момент так:

[TestClass]
public class TestControllersHomeController
{
    private EL.NET.Web.Controllers.HomeController c;
    //setup
    public TestControllersHomeController(Project.Controllers.HomeController c)
    {
        this.c = c;
    }
    [ClassInitialize]
    public void ClassInitialize()
    {

        var kernel = NinjectWebCommon.CreatePublicKernel();
        kernel.Bind<TestControllersHomeController>().ToSelf();
        kernel.Bind<Project.Controllers.HomeController>().ToSelf();
    }
    [TestMethod]
    public void TestIndex()
    {
        var result = c.Index();
        Assert.IsNotNull(result);
    }

Редактировать:

Я уже выяснил, что репозитории могут загружаться с помощью метода GetService() IKernel. Но для поставщика членства это не работает. Опять же, я не хочу издеваться над провайдером, я хочу выполнить интеграционный тест, чтобы знать, вызывают ли мои методы контроллера какие-либо исключения.

5
задан ckonig 30 May 2012 в 07:04
поделиться