受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

31.3. 变体比较文件 #

由于某些测试天生会产生依赖环境的结果,我们提供了指定备用 预期结果文件的方法。每个回归测试都可以有多个比较文件, 用来展示不同平台上的可能结果。对于每个测试应使用哪个比较文件,有两种 相互独立的判定机制。

第一种机制允许针对特定平台选择比较文件。有一个映射文件 src/test/regress/resultmap,用于定义每个平台应使用 哪个比较文件。要为某个特定平台消除虚假的测试失败, 你需要先选择或创建一个变体结果文件,然后在resultmap 文件中增加一行。

映射文件中的每一行都采用如下形式:

testname:output:platformpattern=comparisonfilename

测试名就是相应回归测试模块的名称。输出值指明要检查哪个输出文件。 对标准回归测试而言,这里始终是out。该值对应于 输出文件的扩展名。平台模式是 Unix 工具expr风格 的模式(也就是在开头隐含^锚点的正则表达式)。 它会与config.guess打印出的平台名进行匹配。 比较文件名则是替代结果比较文件的基名。

例如,有些系统缺少可用的strtof函数,而我们的变通办法 会在float4回归测试中造成舍入错误。因此,我们提供 了一个变体比较文件float4-misrounded-input.out, 其中包含这些系统上应期望的结果。为了让虚假的失败消息 不再出现在HP-UX 10平台上, resultmap中包含:

float4:out:hppa.*-hp-hpux10.*=float4-misrounded-input.out

这会在任何config.guess输出匹配 hppa.*-hp-hpux10.*的机器上触发。 resultmap中的其他行则会在其他适用平台上选择该 变体比较文件。

第二种用于选择变体比较文件的机制更加自动化:它只是在多个提供的比较文件 中选取最佳匹配。回归测试驱动脚本既考虑某个测试的标准 比较文件testname.out, 也考虑名为 testname_digit.out 的变体文件(其中digit可以是任一单个数字 0-9)。如果其中任何一个文件 完全匹配,就认为测试通过;否则,会使用生成最短 diff 的那个文件来创建 失败报告。(如果resultmap为该特定测试包含一项, 那么基础testname就是 resultmap中给出的替代名称。)

例如,对于char测试,比较文件 char.out包含在CPOSIX区域设置中应当出现的结果,而文件 char_1.out则包含在许多其他区域设置中出现的排序结果。

最佳匹配机制原本是为了解决依赖区域设置的结果问题,但它也可以用于任何 仅凭平台名无法轻易预测测试结果的场景。该机制的一个局限是,测试驱动器 无法判断哪一个变体对当前环境才真正正确;它只会选择 看起来最合适的那个。因此,最安全的做法是只对那些你愿意在所有上下文中 都视为同样有效的变体结果使用这种机制。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。