Я пытаюсь создать тест NUnit для проекта, который использует Ninject. Ninject был установлен через Nuget, поэтому класс конфигурации выглядит аналогично этой упрощенной версии:
[assembly: WebActivator.PreApplicationStartMethod(typeof(NinjectMVC3), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(NinjectMVC3), "Stop")]
public static class NinjectMVC3
{
private static readonly Bootstrapper Bootstrapper = new Bootstrapper();
private static IKernel _kernel;
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
Bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
Bootstrapper.ShutDown();
}
}
Я хочу, чтобы эти методы вызывались в моем классе тестового запуска. Я старался:
[TestFixture]
public class TestBase
{
[SetUp]
public void Setup()
{
NinjectMVC3.Startup();
}
[TearDown]
public void TearDown()
{
NinjectMVC3.TearDown();
}
}
Это не будет работать, потому что я пытаюсь вручную вызвать методы, которые управляются WebActivator. Поэтому я ищу способ проинструктировать WebActivator для вызова этих методов в «правильное время». Напомню, что есть два проекта, с которыми я имею дело, один - это веб-проект MVC (и он использует WebActivator для Ninject), а другой - тестовый проект для моего веб-проекта MVC. Я попытался вызвать WebActivator, изменив реализацию моего метода установки:
[SetUp]
public void Setup()
{
WebActivator.ActivationManager.Run();
}
Это не работает. Насколько я понимаю, под этим вызовом WebActivator должен сделать что-то похожее на:
foreach (var assemblyFile in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll")) {
var assembly = Assembly.LoadFrom(assemblyFile);
foreach (PreApplicationStartMethodAttribute preStartAttrib in assembly.GetCustomAttributes(
typeof(PreApplicationStartMethodAttribute),
inherit: false)) {
preStartAttrib.InvokeMethod();
}
}
Так что я думаю, что он не может найти сборку. Поэтому вопрос заключается в том, как я могу заказать WebActivator для сканирования через дополнительную сборку и запуска некоторых методов в «нужное время». Или, может быть, меня здесь вводят в заблуждение, и для того, чтобы протестировать мой проект Ninject, я должен выбрать другой подход?
Я могу тестировать свои решения без WebActivator, но, поскольку он широко используется в последнее время, я стремлюсь научиться справляться с ним и заставлять его делать то, что я хочу.