使用具有“is”前缀getter方法的Hamcrest断言布尔字段

8
我们希望确认一个自定义对象列表中是否包含一个对象,该对象的某些字段具有特定的值,并进行一系列此类断言。
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

有没有现成的方案来克服这个问题,还是需要使用某种自定义匹配器来处理?

这应该适用于原始的布尔值。你是不是在说Boolean对象? - Ruben
1
谢谢。实际上,这些字段是布尔类型。所讨论的类实际上是JPA / Hibernate实体,其所有字段类型都是对象而不是基元类型。我们不能修改类本身,并且必须在测试中找到一些解决方案来规避它。 - hammerfest
2个回答

7
Hamcrest在内部使用java.beans.PropertyDescriptor来实现标准的JavaBean行为,允许使用is仅适用于布尔原始类型。
很抱歉,您需要创建自己的Matcher(类似于具有getter值)。

1
FYI: 你可以使用Hamcrest扩展shazamcrest及其sameBeanAsDiagnosingCustomisableMatcher),即使对于Boolean类型也可以完美地工作;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接