2012-06-19 3 views
1

Я пытаюсь написать интеграционные тесты. Поэтому мне нужно, чтобы методы запуска WebActivator выполнялись на этапе инициализации перед запуском моих модульных тестов.Запустите 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.. 

с StackTrace как этот

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 

Я знаю, что модульные тесты должны работать с но мне действительно нужны эти интеграционные тесты.

+1

Ваше приложение должно быть размещено на веб-сервере, если вы когда-либо ожидали, что сможете запустить этот метод. Интеграционные тесты обычно выполняются путем развертывания вашего приложения на каком-то сервере, а затем для запуска HTTP-запросов и проверки ответа. Существуют рамки, которые могут помочь вам автоматизировать эти веб-тесты. Конечные версии Visual Studio имеют встроенную функциональность. –

+0

Ну, я думал, они добавили «Поддержка вызова методов запуска за пределами ASP.NET» ... Но я не могу заставить его работать (http://blog.davidebbo.com/2011/02/new-features-in-webactivator -13.html? ShowComment = 1340099397689 # c7847093432479571136) – ckonig

+0

Привет, вы могли бы опубликовать всю трассировку стека? Вам нужно только вызвать 'WebActivator.ActivationManager.Run();', он будет вызывать методы предварительного запуска. –

ответ

0

Я хотел запустить WebActivator для создания своих Ninject-сопоставлений.

В итоге я создал интерфейс оболочки для контейнера DI. Мои репозитории получают доступ к DI только через эту оболочку.

В веб-приложении я использую конкретную реализацию этого интерфейса для Ninject, а для тестов я сделал пользовательскую реализацию.

Я все еще думаю, что должно быть возможно сделать работу Ninject в модульных тестах каким-то образом, но пока это также работает.

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