java - 在哪里存储测试的预期输出?

标签 java xml testing properties

编写测试我希望被测试的方法返回特定的输出。通常我会检查对于给定的数据库操作,我会得到特定的输出。我的做法通常是在测试本身中将数组编写为快速映射/属性文件。 此解决方案速度很快,并且不易受到外部文件运行时更改的影响,无法从中加载预期结果。

一个解决方案是将数据放在一个 java 源文件中,这样我就可以减少测试的膨胀,并且仍然可以得到一个编译时检查的测试。这个怎么样?

或者是loading the exepected results as resources更好的方法? .properties 文件不够好,因为每个键只能有一个值。是commons-config怎么走?

我更喜欢一个简单的解决方案,我为每个键命名属性,所以对于每个条目,我可能有一个 doc-lengthnumFound 属性值(听起来像xml 节点的元素)?

你是怎么做到的?

最佳答案

您必须记住维护此类测试。在使用 Spring-WS 测试支持编写了几个 Web 服务测试之后,我必须承认在外部 XML 文件中存储请求(测试设置)和预期响应并不是一个好主意。每个请求-响应对都有与测试用例相同的名称前缀,因此一切都是自动化的并且非常干净。但是重构和诊断测试失败仍然很痛苦。一段时间后,我意识到将 XML 作为字符串嵌入到测试用例中,虽然丑陋,但更易于维护。

在您的情况下,我假设您调用了一些数据库查询并获得了 map 列表作为响应。编写一些不错的 DSL 来对这些结构进行断言怎么样?实际上,FEST-Assert对此非常有用。

假设您测试以下查询(我知道它过于简单化):

List<Map<String, Object>> rs = db.query("SELECT id, name FROM Users");

然后你可以简单地写:

assertThat(rs).hasSize(1);
assertThat(rs.get(0))
  .hasSize(2)
  .includes(
    entry("id", 7),
    entry("name", "John")
  )
);

当然,它可以而且应该进一步简化以更好地满足您的需求。在一个屏幕上显示完整的测试场景比从一个文件跳到另一个文件不是更容易吗?

或者也许你应该尝试 Fitnesse (看起来你不再做单元测试,所以验收测试框架应该没问题),测试存储在类似 wiki 的文档中,包括表格?

关于java - 在哪里存储测试的预期输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049578/

相关文章:

java - 使用 C++ 向 jar 发送命令

django 测试使用的正确模板 : with self. assertTemplateUsed()

xml - 通过XPath获取所有冗余元素

java - 在 Android 上计算文件中的 XML 元素

android - 在焦点 EditText 问题处隐藏工具栏

selenium - 如何在 jmeter 关联中使用来自 html 响应的 token id(值)

ruby-on-rails - RSPEC 能否处理 90% 通过就足够好的阈值测试?

java - Java Clip 类中的 Drain 方法

允许有空格的 Java 列表

java - 运算符(operator)间隔