由于某些测试天生会产生依赖环境的结果,我们提供了指定备用 “预期”结果文件的方法。每个回归测试都可以有多个比较文件, 用来展示不同平台上的可能结果。对于每个测试应使用哪个比较文件,有两种 相互独立的判定机制。
第一种机制允许针对特定平台选择比较文件。有一个映射文件 src/test/regress/resultmap,用于定义每个平台应使用 哪个比较文件。要为某个特定平台消除虚假的测试“失败”, 你需要先选择或创建一个变体结果文件,然后在resultmap 文件中增加一行。
映射文件中的每一行都采用如下形式:
testname:output:platformpattern=comparisonfilename
测试名就是相应回归测试模块的名称。输出值指明要检查哪个输出文件。 对标准回归测试而言,这里始终是out。该值对应于 输出文件的扩展名。平台模式是 Unix 工具expr风格 的模式(也就是在开头隐含^锚点的正则表达式)。 它会与config.guess打印出的平台名进行匹配。 比较文件名则是替代结果比较文件的基名。
例如,有些系统缺少可用的strtof函数,而我们的变通办法 会在float4回归测试中造成舍入错误。因此,我们提供 了一个变体比较文件float4-misrounded-input.out, 其中包含这些系统上应期望的结果。为了让虚假的“失败”消息 不再出现在Cygwin平台上, resultmap中包含:
float4:out:.*-.*-cygwin.*=float4-misrounded-input.out
这会在任何config.guess输出匹配 .*-.*-cygwin.*的机器上触发。 resultmap中的其他行则会在其他适用平台上选择该 变体比较文件。
第二种用于选择变体比较文件的机制更加自动化:它只是在多个提供的比较文件 中选取“最佳匹配”。回归测试驱动脚本既考虑某个测试的标准 比较文件, 也考虑名为 testname.out 的变体文件(其中testname_digit.outdigit可以是任一单个数字 0-9)。如果其中任何一个文件 完全匹配,就认为测试通过;否则,会使用生成最短 diff 的那个文件来创建 失败报告。(如果resultmap为该特定测试包含一项, 那么基础testname就是 resultmap中给出的替代名称。)
例如,对于char测试,比较文件 char.out包含在C和 POSIX区域设置中应当出现的结果,而文件 char_1.out则包含在许多其他区域设置中出现的排序结果。
最佳匹配机制原本是为了解决依赖区域设置的结果问题,但它也可以用于任何 仅凭平台名无法轻易预测测试结果的场景。该机制的一个局限是,测试驱动器 无法判断哪一个变体对当前环境才真正“正确”;它只会选择 看起来最合适的那个。因此,最安全的做法是只对那些你愿意在所有上下文中 都视为同样有效的变体结果使用这种机制。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。