2016-04-15 14 views
1

Ich versuche, einige Integrationstests für eine MVC-Anwendung zu schreiben, wieQuerying JsonResult in C# Integrationstests

-Controller folgt

public JsonResult CreateWithJson(List<string> values) 
{ 
    if (values == null) return Json(new { Valid = false, Message = "No data was received by the server" }); 
} 

Testklasse

public static void TestEmptyDataFailsGracefully() 
{ 
    var objUt = new MyController(); 
    var actual = objUt.CreateWithJson(new List<string>()); 

    actual.Should().BeOfType(typeof(JsonResult)); 

    // this is System.Object 
    actual.Data... 

    // what I want to do 
    actual.Data.Valid.Should.Be(false); 
} 

So wie ich abfragen der anonyme Typ zurückgegeben in der JsonResult bitte?

+0

könnte dies helfen: http: //stackoverflow.com/questions/17232470/how-to-access-jsonresult-data-when-testing-in-asp-net-mvc –

Antwort

2

Sie müssen den Typ definieren, für den Sie die Deserialisierung durchführen möchten JsonResult.

public class ValidationResults 
{ 
    bool Valid {get;set;} 
    string Message {get;set;} 
} 

public JsonResult CreateWithJson(List<string> values) 
{ 
    if (values == null) return Json(new ValidationResults { Valid = false, Message = "No data was received by the server" }); 
} 

public static void TestEmptyDataFailsGracefully() 
{ 
    var objUt = new MyController(); 
    var actual = objUt.CreateWithJson(new List<string>()); 

    actual.Should().BeOfType(typeof(JsonResult)); 

    var serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(actual.Data); 
    ValidationResults validationResult = serializer.Deserialize<ValidationResults>(json); 


    // what I want to do 
    validationResult .Valid.Should.Be(false); 
} 
+0

Dank perfekt funktioniert; Finden der Referenz für das Testprojekt: http://stackoverflow.com/questions/7000811/cannot-find-javascriptserializer-in-net-4-0 – SkeetJon