我有一个Message带MessageHeaders字段的对象。本MessageHeaders类实现了Map<String, Object>。我想断言我设置了特定的标头。我很难找到MapAssert方法。
这是我想要完成的:
assertThat(actual)
.extracting(Message::getHeaders) // This returns AbstractObjectAssert though
.containsKeys("some key"); // Not available
Run Code Online (Sandbox Code Playgroud)
这是要明确的MessageandMessageHeaders类:
public class Message {
private MessageHeaders headers;
// getter
}
public class MessageHeaders implements Map<String, Object>, Serializable {
// methods
}
Run Code Online (Sandbox Code Playgroud)
为了使用,MapAssert您需要直接提取该MessageHeaders字段并使用以下命令进行提取asInstanceOf:
assertThat(actual)
.extracting("headers")
.asInstanceOf(InstanceOfAssertFactories.MAP)
.containsKey("some key");
Run Code Online (Sandbox Code Playgroud)
AssertJ Core 3.14.0提供了新的extracting()支持直接强制转换,因此你可以这样写:
assertThat(actual)
.extracting(Message::getHeaders, as(InstanceOfAssertFactories.MAP))
.containsKey("some key");
Run Code Online (Sandbox Code Playgroud)
请注意,这as()是一个可选的语法糖,用于提高可读性。