【问题标题】:Hamcrest assertion of boolean fields with an "is" prefix getter method带有“is”前缀 getter 方法的布尔字段的 Hamcrest 断言
【发布时间】:2015-10-07 08:48:45
【问题描述】:

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

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

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

【问题讨论】:

  • 这应该适用于原始booleans。您是在谈论Boolean Objects 吗?
  • 谢谢。实际上,这些字段是布尔类型。有问题的类实际上是 JPA/Hibernate 实体,其所有字段类型都是对象而不是原语。我们不能修改类本身,必须在测试中找到一些解决方案来规避它

标签: java junit hamcrest


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2021-11-05
      相关资源
      最近更新 更多