我目前正在开发一个模块,它接受一个业务对象并将该对象的json表示返回给调用者。由于我们环境的限制,我无法使用任何现有的json编写器,因此我编写了自己的json编写器,然后业务对象编写器使用它来序列化我的对象。 json writer以类似于
的方式进行测试@Test
public void writeEmptyArrayTest()
{
String expected = "[ ]";
writer.array().endArray();
assertEquals(expected, writer.toString());
}
这是唯一可管理的,因为每条指令产生的输出很小,即使我一直觉得必须有更好的方法。
我现在面临的问题是为对象编写器模块编写测试,其中输出更大,更易于管理。在预期的字符串中拼写错误的风险使我的测试变得非常糟糕,从长远来看,以这种方式编写代码似乎既愚蠢又无法管理。我一直觉得我想写测试以确保我的测试表现正常,这种感觉让我担心。
这样做的更好方法是什么?
答案 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有效)。一旦发现浏览器脚本执行上的错误,请修复它并编写相关的单元测试,以确保它在将来的版本中不再显示。