如何在启用漂亮打印的情况下对JsonMarshaller进行单元测试



我有一个叫做JsonMarshall(T t)的方法,它接受一个对象并将其转换为Json字符串。在这个方法中,我使用Objectmapper来完成这个任务:

mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t)

现在,假设我有一个类ClientName,其属性为Title和Name,我将用于我的测试。现在,当我尝试用我的方法将ClientName转换为json字符串并通过断言其输出针对一些预期的json字符串(如:

)来测试此方法时:
expectedString =  "{"title":"RandomTitle","Name":"RandomName"}"

我得到两种情况:

  1. 测试失败时,我使用mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t)在我的方法

  2. 当我只做mapper.writeValueAsString(t)时,测试通过

所以我猜writerWithDefaultPrettyPrinter()的缩进导致测试失败。

对于第一个场景,我该如何让这个测试通过,有什么想法吗?

我假设第一个测试失败,因为输出打印得很好,并且包含额外的格式符号,如换行符和空格。

你能做的:

  1. 在第一个测试方法中使用另一个预期字符串。
  2. 解析被测方法的返回字符串,并将反序列化对象用于测试方法。
  3. 您可以使用JsonPath库进行测试(工作方式类似于XPath)。我使用JsonPathResultMatcher来测试基于Spring框架的RESTful web服务。

作为@Patrick的完全合理的选项的替代方案,我建议第四个选择:您可以使用JMockit, Mockito或Easymock之类的工具模拟Objectmapper,并只需确保您的JsonMarshall方法调用Objectmapper上的适当方法。

当然,这假定您毫不怀疑mapper.writerWithDefaultPrettyPrinter().writeValueAsString()做了它应该做的事情这就是您想要做的事情。如果您对这些条件中的任何一个有任何疑问,最好不要嘲笑,至少现在是这样。

最新更新