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

使用AssertJ在同一个对象上断言多个JsonNode路径?

梁修贤
2023-03-14

我试图让一些assertj断言更干净一点。我们经常在一个非平凡的层次结构级别上为各种对象断言多个子属性。我一直在使用“提取”从一个对象中提取简单的属性,但我现在尝试做的事情稍微复杂一点,而且它不起作用。我所看到的似乎是assertj中的一个bug,但我不确定它为什么要做它正在做的事情。

我从这样开始:

assertThat(expression).at("/content/liability").asText()).isEqualTo("CRU");
assertThat(expression).at("/content/enterpriseType").asText()).isEqualTo("GBS");

我想做这样的事情:

assertThat(expression)
    .extracting(jn -> jn.at("/content/liability").asText(),
                jn -> jn.at("/content/enterpriseType").asText())
    .containsExactly("CRU", "GBS");
{
  "content": {
    ...
    "enterpriseType": "GBS",
    ...
    "liability": "CRU",
    ...
  }
}
assertThat(expression))
    .extracting(jn -> textAtPath(jn, "/content/liability"),
                jn -> textAtPath(jn, "/content/enterpriseType"))
    .containsExactly(tuple("CRU", "GBS"));
private String textAtPath(JsonNode node, String path) {
    return node.at(path).asText();
}
{
  ...
  "enterpriseType": "GBS",
  ...
  "liability": "CRU",
  ...
}

我尝试更改测试,因此两个路径字符串是“/reportion”和“/EnterpriseType”。测试通过了。我不会就这样离开的,因为这根本没有意义。

共有1个答案

酆奇文
2023-03-14

我相信这在https://github.com/joel-costigliola/assertj-core/issues/1954中有讨论。

这里的微妙之处在于,如果expression是可迭代的,那么assertThat(expression)将提供可迭代的断言,并且将对可迭代的元素应用提取

另一方面,如果assertthat(expression)返回了对象断言,则将对expression应用提取

 类似资料:
  • 我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

  • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请

  • 我有两门课: 还有我的测试: 我希望它能通过,因为解包装可选,将转换为,在最后一个方法中,我只是比较字符串。 但它在最后一行失败了: 我不知道为什么可选包装没有打开

  • 基本上,问题是是否有AssertJ(首选)或JUnit断言: 我的测试类(CUT)扩展了JAXB的。解组XML文件时,它应该保证相等的对象恰好存在一次。为了验证这一点,我的测试当前看起来是这样的(在示例中,标准ctor创建相等对象):

  • 问题内容: 我正在尝试在Mock上使用Mockito来执行此操作: 当使用parameter1 调用Mock.someMethod(..)->返回result1 当使用parameter2调用Mock.someMethod(..)时-> return result2 当Mock.someMethod (..)用参数3调用->返回result3 但是Mockito正确地对第一个进行了存根,但是在第二