Java AssertJ将提取的字段强制转换为地图
我有一个带有Java AssertJ将提取的字段强制转换为地图,java,assertj,Java,Assertj,我有一个带有MessageHeaders字段的Message对象。MessageHeaders类实现了一个Map。我想声明我设置了特定的头。我很难找到MapAssert方法 以下是我想要实现的目标: assertThat(actual) .extracting(Message::getHeaders) // This returns AbstractObjectAssert though .containsKeys("some key"); // Not available 下面是
MessageHeaders
字段的Message
对象。MessageHeaders
类实现了一个Map
。我想声明我设置了特定的头。我很难找到MapAssert
方法
以下是我想要实现的目标:
assertThat(actual)
.extracting(Message::getHeaders) // This returns AbstractObjectAssert though
.containsKeys("some key"); // Not available
下面是要明确的消息
和消息头
类:
public class Message {
private MessageHeaders headers;
// getter
}
public class MessageHeaders implements Map<String, Object>, Serializable {
// methods
}
公共类消息{
私有消息头;
//吸气剂
}
公共类MessageHeaders实现映射,可序列化{
//方法
}
我提出的解决方案/解决方法是断言映射本身,而不是使用提取
assertThat(actual.getHeaders())
.containsKey("some key");
要使用
MapAssert
,您需要直接提取MessageHeaders
字段,并使用asInstanceOf
强制执行提取:
assertThat(actual)
.extracting("headers")
.asInstanceOf(InstanceOfAssertFactories.MAP)
.containsKey("some key");
AssertJ Core 3.14.0提供了一个支持直接铸造的新版本,因此您可以编写:
assertThat(actual)
.extracting(Message::getHeaders, as(InstanceOfAssertFactories.MAP))
.containsKey("some key");
请注意,这是一种可选语法,用于提高可读性。asInstanceOf()
是在AssertJ Core 3.13.0版本中引入的。我必须更新。