我需要测试在 Linux 和 Windows 上运行的数值软件。测试涉及将输出与已知良好的输出等进行比较,类似于 数值回归测试中描述的内容。为了澄清,输出不一定是数字 - 它们可以是分类器或文本的分类预测。在 Linux 上,这是一个差异;在 Windows 上是另外一回事,但我的目标是每个测试只编写一次。我知道 CMake/CTest 可用于生成跨平台测试,但它们似乎仅限于检查非零退出状态。是否有软件可以在每个平台上自动选择正确的“差异”?也许是我不知道的 CTest 模块/包?
问问题
124 次
1 回答
0
CMake 和 CTest 不提供复杂的测试评估。它主要区分通过测试、跳过测试、失败测试(非零返回值、异常、SIGTERM)。
使用FAIL / PASS_REGULAR_EXPRESSION来评估输出。您可以对这两个属性使用正则表达式。正则表达式非常有限;尤其是估计数值误差的正则表达式是没有用的。可以编写一个更复杂的 CMake 函数来扩展 CMake 的功能。我不知道有任何项目这样做。
您可以使用专门用于单元测试的外部工具。此工具的结果值由 CTest 评估。根据语言的不同,可能的外部工具有:googletest、JUnit、Python unittest 甚至 diff。
编写您自己的输出评估脚本。例如 Perl 或 Python 易于使用并且具有良好的解析质量。您可以通过添加带有实际测试的脚本作为参数
add_test
。该脚本运行测试,比较输出并将结果发送给 CTest。
因此,您必须安装额外的语言解释器,如 Perl 或 Python 或第三方帮助工具。或者坚持为每个平台编写评估。
于 2015-11-21T22:55:18.013 回答