单元测试JSON输出模块,最佳实践

Mia*_*rke 6 json unit-testing

我目前正在研究一个模块,它接受我们的业务对象之一并将该对象的json表示返回给调用者.由于我们环境的限制,我无法使用任何现有的json编写器,因此我编写了自己的json编写器,然后业务对象编写器使用它来序列化我的对象.json编写器以类似于此的方式进行测试

@Test
public void writeEmptyArrayTest() 
{
   String expected = "[  ]";
   writer.array().endArray();
   assertEquals(expected, writer.toString());
}
Run Code Online (Sandbox Code Playgroud)

这是唯一可管理的,因为每个指令产生的输出很小,即使我一直觉得必须有更好的方法.

我现在面临的问题是为对象编写器模块编写测试,其中输出更大,更易于管理.在预期的字符串中拼写错误的风险使我的测试变得非常糟糕,从长远来看,以这种方式编写代码似乎既愚蠢又无法管理.我一直觉得我想写测试以确保我的测试表现正常,这种感觉让我担心.

这样做的更好方法是什么?

Chr*_*s J 5

从技术上讲,部署代码的环境与开发代码的环境不同,因此我将使用现有的JSON读取器/编写器来测试您创建的代码.如果您正在使用maven,您甚至可以设置您选择用于"测试"的JSON包的范围,以便它不会包含在实际构建中.

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20090911</version>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

或者,您可以从JSON编写器继承您的单元测试.通过继承,您可以测试所有受保护和私有内部位,而不是检查实际的String输出.