2016-04-15 47 views
1

我試圖寫一個MVC應用程序的一些集成測試如下查詢JsonResult在C#集成測試

控制器

public JsonResult CreateWithJson(List<string> values) 
{ 
    if (values == null) return Json(new { 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)); 

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

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

那麼,如何查詢請在JsonResult中返回匿名類型?

+0

這可能幫助:HTTP://stackoverflow.com/questions/17232470/how-to-access-jsonresult-data-when-testing-in-asp-net-mvc –

回答

2

您將需要定義您想要反序列化的類型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

感謝完美的工作;找到測試項目的參考:http://stackoverflow.com/questions/7000811/cannot-find-javascriptserializer-in-net-4-0 – SkeetJon