写了一个自定义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框架工作。这种方法完全有效!随时发布您的答案。 –