2016-09-26 40 views
0

使用MSTest,當我嘗試運行一個具有動態類型的測試時,該動態類型是JSON對象(來自API查詢)的容器I我希望能夠在下面註釋掉JSON元素,但它失敗了,在那裏把它當作一個項目集合看起來好像沒問題。 如果檢查'(jsonResponse.message)'它的值爲「Hi」 - 但它不會在單元測試中工作。 這是爲什麼?單元測試如何使用json-net將JSON對象反序列化爲動態對象

// http://www.newtonsoft.com/json/help/html/LINQtoJSON.htm // Deserialize json object into dynamic object using Json.net

[TestMethod] 
public void DynamicDeserialization() 
{ 
    dynamic jsonResponse = JsonConvert.DeserializeObject("{\"message\":\"Hi\"}"); 
    JObject d = JObject.Parse("{\"message\":\"Hi\"}"); 
    Assert.IsTrue((string)d["message"] == "Hi");   // Is ok 
// Assert.IsTrue(jsonResponse.message.ToString() == "Hi"); // is not ok 
}  
+1

定義「行不通」 - 你得到一個異常?如果是這樣,那麼異常消息會說什麼?如果不是,你觀察到了什麼行爲,這與你預期會發生什麼不同? –

+0

未註釋的最後一行,運行代碼並測試工作/通過。問題是什麼。如果你在調試的時候查看'jsonResponse',你會發現它是一個'JObject',並且被封裝爲'dynamic'。 – Nkosi

回答

0

取消註釋最後一行,跑了代碼和測試工作/通過。如果你在調試的時候看到jsonResponse,你會看到它是一個JObject以及dynamic

事實上,如果我將d轉換爲dynamic,我可以執行相同的斷言並且它也可以通過。

[TestMethod] 
public void DynamicDeserialization() { 
    var json = "{\"message\":\"Hi\"}"; 
    dynamic jsonResponse = JsonConvert.DeserializeObject(json); 
    dynamic d = JObject.Parse(json); 
    Assert.IsTrue(d.message.ToString() == "Hi"); 
    Assert.IsTrue(jsonResponse.message.ToString() == "Hi"); 
} 

您可能需要進行檢查,以確保您使用的是最新版本的Json.Net的

相關問題