猿问

AssertJ 将提取的字段转换为 Map

我有一个Message带字段的对象MessageHeaders。该类MessageHeaders实现了一个Map<String, Object>. 我想断言我设置了特定的标头。我无法提出MapAssert方法。


这是我想要完成的:


assertThat(actual)

  .extracting(Message::getHeaders) // This returns AbstractObjectAssert though

  .containsKeys("some key");  // Not available 

这是要清楚的Message和类:MessageHeaders


public class Message {

  private MessageHeaders headers;

  // getter

}



public class MessageHeaders implements Map<String, Object>, Serializable {

  // methods

}


手掌心
浏览 162回答 3
3回答

慕码人8056858

为了使用,MapAssert您需要直接提取MessageHeaders字段并将提取内容转换为asInstanceOf:assertThat(actual).extracting("headers").asInstanceOf(InstanceOfAssertFactories.MAP).containsKey("some key");

汪汪一只猫

AssertJ Core 3.14.0 提供了一个新的extracting()支持直接转换的方式,所以你可以这样写:assertThat(actual)   .extracting(Message::getHeaders, as(InstanceOfAssertFactories.MAP))   .containsKey("some key");请注意,这as()是一个可选的语法糖,可提高可读性。

宝慕林4294392

我想出的解决方案/解决方法是断言地图本身而不是使用提取。assertThat(actual.getHeaders()) &nbsp;&nbsp;.containsKey("some&nbsp;key");
随时随地看视频慕课网APP

相关分类

Java
我要回答