当前位置: 首页 > 知识库问答 >
问题:

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

贾骏喆
2023-03-14

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

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

是否有现成的解决方案来克服这一点,或者它应该用某种自定义匹配器来处理?

共有2个答案

孔阎宝
2023-03-14

仅供参考:您可以使用Hamcrest扩展名shazamcrest,它是sameBeanAsDiagnostingCustomisableMatcher),即使对于布尔类型,它也能正常工作;)

薛欣德
2023-03-14

Hamcrest在内部使用实现标准JavaBean行为的java.beans.Properties tydescription ptor,允许仅针对布尔基元类型的is

恐怕您必须创建自己的匹配器(类似于hasGetterValue的东西)

 类似资料:
  • 我有一个布尔变量在lombok生成。我正在使用lombok注释。如何将方法更改为hasObject()

  • 问题内容: 我正在使用Java lombok批注@Getter为我的POJO生成吸气剂。我有一个名为“ isAbc”的“布尔”字段。在这种情况下,@ Getter批注生成名为“ isAbc()”的方法。它不应该生成名为“ isIsAbc()”的方法吗? 问题答案: 阅读龙目岛页面上的“小字”部分https://projectlombok.org/features/GetterSetter.html

  • 我有一个实体。我将变量定义为布尔值,并使用Intellij Idea快捷方式创建了Getter和Setter方法。 创建后生成: 我期待getIsForLab和setIsForLab。这是Java的惯例吗?为什么Intellij删除了我的前缀?

  • 这个简单的单道具类可以很好地工作,并且可以使用Ummarshale 输出: 但是,如果我用方法isA()取消注释该行,它将不再工作,并且输出仅为(on win): 所以它看起来像是JAXB的命名冲突。实际上,acessor类型none应该忽略othef字段,但是isA()方法阻止了a字段被标记。 所以,一种不经意的修复方法,就是重命名方法isA(),以避免冲突。但我想知道: 1)这真的被JAXB禁

  • 使用jaxb2-maven-plugin和jaxb-xjc,在生成类时,jaxb创建带有get前缀的布尔访问器,但是我希望它使用java约定"is"创建。 这里是xsd: 创建的方法是; 但是我想要; 我试过了

  • 问题内容: 我想测试对象的特定字段是否与我指定的值匹配。在这种情况下,它是S3Bucket对象内的存储桶名称。据我所知,我需要为此编写一个自定义匹配器: 如果有一个更简单的方法可以做到这一点,那就好了: 谁能指出我类似的东西?我想在这种情况下我已经解决了我的问题,但这不是我第一次希望采用一种更简单的方法。 问题答案: 另外,对于更类型安全的版本,还有FeatureMatcher。在这种情况下,类似