2016-04-15 1 views
1

Je suis en train d'écrire des tests d'intégration pour une application MVC comme suitInterrogation JsonResult dans les tests C# intégration

Contrôleur

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

Classe d'essai

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); 
} 

Alors, comment faire une requête le type anonyme retourné dans le JsonResult s'il vous plaît?

+0

cela pourrait aider à: http: //stackoverflow.com/questions/17232470/how-to-access-jsonresult-data-when-testing-in-asp-net-mvc –

Répondre

2

Vous devrez définir le type auquel vous souhaitez désérialiser 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

fonctionne parfaitement grâce; trouver la référence pour le projet de test: http://stackoverflow.com/questions/7000811/cannot-find-javascriptserializer-in-net-4-0 – SkeetJon