寫了一個自定義JsonConverter來處理不同版本的相同api返回的不同Json格式。一個應用程序向其他幾個應用程序發出請求,我們不知道將返回哪種格式,因此JsonConverter處理此問題並似乎運行良好。我需要爲項目添加單元測試,除了我沒有找到有用的資源來幫助模擬一些Newtonsoft.Json對象,主要是JsonReader。如何模擬JsonReader單元測試自定義JsonConverter
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jsonValue = JObject.Load(reader);
if(jsonValue == null)
{
return null;
}
var responseData = ReadJsonObject(jsonValue);
return responseData;
}
[TestMethod]
public void ReadJsonReturnNullForNullJson()
{
var converter = new DataConverter();
_mockJsonReader.Setup(x => x.Value).Returns(null);
var responseData = converter.ReadJson(_mockJsonReader.Object, typeof(ProbeResponseData), null, _mockJsonSerializer.Object);
Assert.IsNull(responseData);
}
一些代碼已經從ReadJson方法中取出。我想安裝JsonReader返回實際JSON的值,在這種情況下是空值,但在其他單元測試中,我想要一個實際的Json(JObject)。在運行單元測試時,我收到一個「Newtonsoft.JsonReaderException:從JsonReader讀取JObject時出錯。路徑''。」
看看在測試中使用SerializeObject/DeserializeObject與已知類型進行接觸;並讓我知道如果我錯過了一些東西,所以我可以提供一個完整的答案。 –
@JeffDalley using JsonConvert.DeserializeObject(jsonString);調用自定義轉換器的ReadJson方法,而不需要模擬一些NewtonSoft框架工作。這種方法完全有效!隨時發佈您的答案。 –