Hamcrest布尔值传入问题:解决'Expected type Matcher[bool], got bool instead'类型匹配报错
解决Hamcrest断言中的类型匹配错误
你遇到的这个错误核心问题是没搞清楚Hamcrest中assert_that方法的参数类型要求。IDE提示的Expected type 'Matcher[bool]', got 'bool' instead已经说得很清楚了:你把一个布尔值放在了需要Matcher对象的参数位置上。
问题根源
Hamcrest的assert_that有几种重载形式,但你用的调用方式assert_that(True, all_is_valid,"test failed")不符合任何正确的重载:
- 如果要断言布尔条件,正确的形式是
assert_that(布尔条件, 错误信息) - 如果要使用Hamcrest的匹配器风格,正确的形式是
assert_that(实际值, 匹配器对象, 错误信息)
你现在的写法把布尔值all_is_valid放在了第二个参数(本该是匹配器的位置),自然会触发类型不匹配。
两种解决方案
方案1:直接断言布尔条件(简单直接)
如果你只是想验证all_is_valid是否为True,可以调整参数顺序,用assert_that的布尔断言重载:
all_is_valid = True actual = None if not actual: all_is_valid = False assert_that(all_is_valid, "test failed")
这种方式下,第一个参数是要验证的布尔值,第二个参数是错误提示字符串,完全符合方法的参数要求。
方案2:使用Hamcrest布尔匹配器(更符合Hamcrest风格)
如果你想遵循Hamcrest的匹配器断言范式,可以导入布尔匹配器(比如is_或者equalTo),把all_is_valid作为实际值,匹配器放在第二个参数位置:
from hamcrest import assert_that, is_, equalTo all_is_valid = True actual = None if not actual: all_is_valid = False # 用is_匹配器 assert_that(all_is_valid, is_(True), "test failed") # 或者用equalTo匹配器,效果一样 # assert_that(all_is_valid, equalTo(True), "test failed")
这样写法既符合Hamcrest的设计理念,也能让IDE不再报类型错误。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

