Wie teste ich Unit-Test-Aktionen ohne Mocking, die UpdateModel verwenden?

8

Ich habe mich durch Scott Guthries exzellenten Post auf ASP.NET MVC Beta 1 . Darin zeigt er die Verbesserungen an der UpdateModel-Methode und wie sie Unit-Tests verbessern. Ich habe ein ähnliches Projekt erstellt, aber jedes Mal, wenn ich einen UnitTest mit einem Aufruf von UpdateModel ausführe, erhalte ich eine ArgumentNullException mit dem Namen controllerContext.

Hier sind die relevanten Bits, beginnend mit meinem Modell:

%Vor%

Die Controller-Aktion:

%Vor%

Und schließlich mein Unit-Test, der scheitert:

%Vor%

ArgumentNullException wird durch den Aufruf von UpdateModel mit der Nachricht "Wert kann nicht null sein. Parametername: controllerContext" ausgelöst. Ich nehme an, dass irgendwo UpdateModel die System.Web.Mvc.ControllerContext benötigt, die während der Ausführung des Tests nicht vorhanden ist.

Ich gehe auch davon aus, dass ich irgendwo etwas falsch mache und nur in die richtige Richtung zeigen muss.

Hilfe bitte!

    
Doug Wilson 01.12.2008, 20:20
quelle

3 Antworten

5

Ich denke nicht, dass es getan werden kann, da TryUpdateModel, das UpdateModel verwendet, den ControllerContext referenziert, der Null ist, wenn er von einem Komponententest aufgerufen wird. Ich benutze RhinoMocks, um die verschiedenen Komponenten, die der Controller benötigt, nachzuahmen oder zu stubben.

%Vor%

Hier ist das relevante Bit aus der Quelle von Controller.cs auf www.codeplex.com/aspnet:

%Vor%     
tvanfosson 01.12.2008, 20:27
quelle
2

Ich hatte das gleiche Problem. Nachdem ich die Lösung von tvanfosson gelesen hatte, versuchte ich eine einfache Lösung, die kein Mock-Framework enthielt.

Fügen Sie dem Controller einen standardmäßigen ControllerContext wie folgt hinzu:

%Vor%

Das hat den Fehler für mich während des Komponententests behoben. Ich hoffe, dass dies jemand anderem helfen kann.

    
Brian 03.12.2010 20:47
quelle
0

Oder Sie können einen Formulardatenproxy wie

erstellen %Vor%
  • Plus. Einfach Unit-Tests erstellen
  • Plus. Definieren Sie eine weiße Liste von Feldern, die von post
  • aktualisiert werden
  • Plus. Einfache Setup-Validierungsregeln, einfach testen.
  • Minus. Sie sollten das Datum vom Proxy zum Modell
  • verschieben

So sollte Controller.Action aussehen, wie

%Vor%     
msa7 31.03.2010 10:28
quelle