Eine Aktionsmethode in meiner ASP.NET MVC2-Anwendung gibt ein JsonResult-Objekt zurück und in meinem Komponententest möchte ich überprüfen, ob das zurückgegebene JSON-Objekt tatsächlich die erwarteten Werte enthält.
Ich habe es versucht:
%Vor%Aber ich bekomme eine RuntimeBinderException "'Objekt' enthält keine Definition für 'ErrorLevel'".
Wenn ich jedoch in Zeile 2 einen Haltepunkt platziere und die dynamische Variable json überprüfe (siehe Bild unten), enthält offensichtlich die ErrorLevel-Zeichenfolge und hat den erwarteten Wert, also wenn die Laufzeit Binder spielte nicht lustig, der Test würde passieren.
Was bekomme ich nicht? Was mache ich falsch und wie kann ich das beheben? Wie kann ich die Behauptung bestehen lassen?
Sie brauchen nicht wirklich dynamisch. Hier ist ein Beispiel. Angenommen, Sie hatten die folgende Aktion, die Sie testen möchten:
%Vor%und der entsprechende Test:
%Vor%Vielleicht finden Sie auch den folgenden Blog-Beitrag .
Die Eigenschaft Data
von JsonResult
hat den Typ Object
. Dies bedeutet, obwohl Sie eine dynamische Deklaration haben, ist der Typ, der gesetzt ist, immer Object
. Das andere Problem besteht darin, dass Sie einen anonymen Typ als Data
verwenden und dann versuchen, darauf als deklarierte Instanz zuzugreifen, die außerhalb des gültigen Bereichs liegt. Verwenden Sie @ Darins Technik für den Zugriff auf die Eigenschaftswerte mit RouteValueDictionary
.
Tags und Links c# unit-testing asp.net-mvc-2 json dynamic