我有一个叫做JsonMarshall(T t)
的方法,它接受一个对象并将其转换为Json字符串。在这个方法中,我使用Objectmapper
来完成这个任务:
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t)
现在,假设我有一个类ClientName
,其属性为Title和Name,我将用于我的测试。现在,当我尝试用我的方法将ClientName
转换为json字符串并通过断言其输出针对一些预期的json字符串(如:
expectedString = "{"title":"RandomTitle","Name":"RandomName"}"
我得到两种情况:
测试失败时,我使用
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t)
在我的方法当我只做
mapper.writeValueAsString(t)
时,测试通过
所以我猜writerWithDefaultPrettyPrinter()
的缩进导致测试失败。
对于第一个场景,我该如何让这个测试通过,有什么想法吗?
我假设第一个测试失败,因为输出打印得很好,并且包含额外的格式符号,如换行符和空格。
你能做的:
- 在第一个测试方法中使用另一个预期字符串。
- 解析被测方法的返回字符串,并将反序列化对象用于测试方法。
- 您可以使用JsonPath库进行测试(工作方式类似于XPath)。我使用JsonPathResultMatcher来测试基于Spring框架的RESTful web服务。
作为@Patrick的完全合理的选项的替代方案,我建议第四个选择:您可以使用JMockit, Mockito或Easymock之类的工具模拟Objectmapper
,并只需确保您的JsonMarshall
方法调用Objectmapper
上的适当方法。
当然,这假定您毫不怀疑mapper.writerWithDefaultPrettyPrinter().writeValueAsString()
做了它应该做的事情和这就是您想要做的事情。如果您对这些条件中的任何一个有任何疑问,最好不要嘲笑,至少现在是这样。