Ninject を使用するプロジェクトの NUnit テストを作成しようとしています。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 にこれらのメソッドを「適切なタイミングで」呼び出すように指示する方法を探しています。1 つは MVC Web プロジェクト (および Ninject に WebActivator を使用) で、もう 1 つは私の MVC Web プロジェクトのテスト プロジェクトです。Setup メソッドの実装を変更して、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 を使用せずに自分のソリューションをテストすることはできますが、最近広く使用されているため、WebActivator に対処し、自分のやりたいことを強制する方法を学びたいと思っています。