繁体   English   中英

AssertJ 将提取的字段转换为 Map

[英]AssertJ casting an extracted field to a Map

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

这是我想要完成的:

assertThat(actual)
  .extracting(Message::getHeaders) // This returns AbstractObjectAssert though
  .containsKeys("some key");  // Not available 

这里的MessageMessageHeaders类要清楚:

public class Message {
  private MessageHeaders headers;
  // getter
}


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

为了使用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()是一种可选的语法糖,用于提高可读性。

我想出的解决方案/解决方法是断言地图本身而不是使用提取。

assertThat(actual.getHeaders())
  .containsKey("some key");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM