Bazel内置expect_failure属性的正确使用方法咨询
Bazel内置
expect_failure属性使用说明 这个属性是Bazel测试规则基类自带的保留内置属性,不允许自定义规则覆盖重定义,本身类型为字符串,不是布尔开关,核心作用是匹配测试执行失败时stderr中预期出现的错误子串,而非简单标记测试是否预期失败。
传入字符串"True"触发报错,是因为Bazel拿到该属性值后会执行两项校验,只要有一项不满足就会抛出Expected failure not found: xxx错误:
- 测试关联的执行进程必须返回非0退出码(即进程实际执行失败)
- 进程输出的stderr内容必须包含
expect_failure属性填写的完整字符串片段
正确使用方式
- 不要在自定义规则中重名定义
expect_failure属性,如果需要布尔类型的“是否预期失败”标记,换用其他属性名(比如expect_tool_fail、should_fail)避开保留字即可,自定义的布尔属性可以按自身业务逻辑实现校验,不受内置逻辑约束。 - 使用内置
expect_failure时,属性值填写预期测试失败时会抛出的错误信息子串即可,参考示例:
# 示例:校验传非法参数时工具是否抛出指定错误 verilog_test( name = "invalid_param_test", srcs = ["test_case.sv"], args = ["--timeout=-1"], # 预期stderr中出现"timeout value must be positive"的错误提示 expect_failure = "timeout value must be positive", )
- 如果只需要“测试运行失败就算通过,不需要匹配具体错误信息”的能力,不要用这个内置属性,通过自定义的布尔属性实现对应逻辑即可,内置属性没有提供“不匹配错误内容、仅判断失败状态”的开关。
内容的提问来源于stack exchange,提问作者Jonathan Mayer
相关产品推荐
相关产品推荐

