Java 带“的布尔字段的Hamcrest断言;是";前缀getter方法

Java 带“的布尔字段的Hamcrest断言;是";前缀getter方法,java,junit,hamcrest,Java,Junit,Hamcrest,我们想断言,自定义对象列表包含一个对象,其某些字段具有特定的值,以及一系列类似这样的断言 assertThat(customObjectList, hasItem(hasProperty("someField", equalTo(someValue)))); 然而,自定义对象也有布尔类型的字段,其中getter方法有一个“is”前缀而不是“get”,并且在那里断言似乎失败了 java.lang.AssertionError: Expected: a collection containing

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

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
java.lang.AssertionError:应为:包含hasProperty(“booleanField”),但:属性“booleanField”不可读的集合

是否有现成的解决方案来克服此问题,或者应该使用某种自定义匹配器来处理此问题?

Hamcrest在内部使用
java.beans.PropertyDescriptor
,它实现了标准的
JavaBean
行为,允许
Is
仅用于布尔基元类型


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

供参考:您可以使用Hamcrest扩展,它是
sameBeanAs
diagnostingcustomisablematcher
),即使对于
布尔类型,它也能很好地工作;)

这应该适用于基本
boolean
s。你是在谈论布尔对象吗?谢谢。事实上,这些字段是布尔类型的。所讨论的类实际上是JPA/Hibernate实体,其所有字段类型都是对象而不是原语。我们不能修改类本身,必须在测试中找到一些解决方案来绕过它