带有 "is" 前缀 getter 方法的布尔字段的 Hamcrest 断言

Hamcrest assertion of boolean fields with an "is" prefix getter method

我们想断言一个自定义对象列表包含一个对象,该对象的某些字段具有特定值,具有像这样的一系列断言

assertThat(customObjectList, hasItem(hasProperty("someField", equalTo(someValue))));

但是自定义对象也有布尔类型字段,其中 getter 方法有一个 "is" 前缀而不是 "get",并且断言似乎失败了

java.lang.AssertionError: Expected: a collection containing hasProperty("booleanField", <true>) but: property "booleanField" is not readable

是否有开箱即用的解决方案来克服这个问题,或者应该使用某种自定义匹配器来处理?

Hamcrest 在内部使用实现标准 JavaBean 行为的 java.beans.PropertyDescriptor,允许 is 仅用于布尔原始类型。

恐怕您必须创建自己的 Matcher(类似于 hasGetterValue)

仅供参考:可以使用 Hamcrest 扩展 shazamcrest,它是 sameBeanAs (DiagnosingCustomisableMatcher),即使对于 Boolean 类型也能正常工作 ;)