1

統合テストを作成しようとしています。したがって、単体テストの開始前の初期化段階で WebActivator の開始メソッドを実行する必要があります。

私はこれを試しました

[TestClass]
public class UnitTests
{
    [ClassInitialize]
    public static void Init(TestContext c)
    {   
        WebActivator.ActivationManager.Run();
    }

しかし、常にエラーメッセージが表示されます:

Unable to create instance of class EL.NET.SecurityAdapter.Tests.UnitTests. Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: This method can only be called during the application's pre-start initialization stage..

このようなスタックトレースで

System.Web.Compilation.BuildManager.ThrowIfPreAppStartNotRunning()
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.LegacyModuleRegistrar.RegisterModule(Type moduleType)
Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(Type moduleType)
<myproject>.Tests.App_Start.NinjectWebCommon.Start() in <myprojectPath>Tests\App_Start\NinjectWebCommon.cs: line 25
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
WebActivator.BaseActivationMethodAttribute.InvokeMethod()
WebActivator.ActivationManager.RunActivationMethods[T]()
WebActivator.ActivationManager.Run()
<myproject>.Tests.UnitTests..ctor() in <myprojectPath>Tests\UnitTests.cs: line 40

単体テストはモックで機能する必要があることはわかっていますが、それらの統合テストが本当に必要です。

4

1 に答える 1

0

WebActivator を実行して Ninject マッピングを作成したいと考えていました。

最終的に、DI コンテナーのラッパー インターフェイスを作成しました。私のリポジトリは、このラッパーを介してのみ DI にアクセスします。

Web アプリケーションでは、このインターフェースの Ninject 固有の実装を使用し、テスト用にカスタム実装を作成しました。

Ninject を単体テストで動作させることができるはずだと今でも思いますが、今のところこれも動作します。

于 2012-06-22T07:07:08.390 に答える