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

时间:2010-04-22 09:22:32

标签: json unit-testing

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

的方式进行测试
@Test
public void writeEmptyArrayTest() 
{
   String expected = "[  ]";
   writer.array().endArray();
   assertEquals(expected, writer.toString());
}

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

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

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

2 个答案:

答案 0 :(得分:5)

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

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20090911</version>
  <scope>test</scope>
</dependency>

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

答案 1 :(得分:2)

由于您不能在服务器端代码中使用外部库,可能更好的方法是将api单元测试限制为必需的: - 测试原始对象序列化 - 测试阵列序列化 - 测试特殊字符序列化 - ......

然后将部分测试移至客户端(使用JSON解析器确保至少您的JSON有效)。一旦发现浏览器脚本执行上的错误,请修复它并编写相关的单元测试,以确保它在将来的版本中不再显示。