2011-01-04 9 views
3

Ich versuche, einen Komponententest für einen Controller zu schreiben, der von einem Typ abhängig ist, dessen Lebensstil "PerWebRequest" ist.Unit Test Controller mit PerWebRequest LifeStyle-Abhängigkeit

Castle wirft die folgende Ausnahme:

System.InvalidOperationException: HttpContext.Current ist null. PerWebRequestLifestyle kann nur in ASP.Net verwendet werden.

Kann ich irgendwie die HttpContext.Current Eigenschaft verspotten, um das zu umgehen?

Ich habe versucht, MVCContribs TestControllerBuilder zu verwenden, um diesen Controller zu initialisieren, aber es hat keine Wirkung.

SymptomTopicController controller = new SymptomTopicController(); 
     controller.WorkOrderFulfillment = workOrderFulfillment; 

     TestControllerBuilder controllerBuilder = new TestControllerBuilder(); 
     controllerBuilder.InitializeController(controller); 

Antwort

7

You're doing it wrong

Zusammenfassung der Abhängigkeit und der Behälter nicht in Ihren Tests verwenden.

+1

Die Abhängigkeit wird abstrahiert. Die Steuerungsabhängigkeiten werden durch Injektion aufgelöst. Die Frage ist, wie man HTTPContext mockt und nicht wie man Komponententests schreibt. – Nick

+0

Die Abhängigkeit ist offensichtlich nicht abstrahiert (genug). Wenn dies der Fall wäre, müssten Sie HTTPContext in Ihrem Test nicht verwenden, da der Controller keine harte Abhängigkeit von ihm hätte und die Art, wie Sie ihn beschreiben, in Ihrem Fall, was bedeutet, dass er nicht abstrahiert ist. –