我有一個Message帶字段的對象MessageHeaders。該類MessageHeaders實現了一個Map<String, Object>. 我想斷言我設置了特定的標頭。我無法提出MapAssert方法。這是我想要完成的:assertThat(actual) .extracting(Message::getHeaders) // This returns AbstractObjectAssert though .containsKeys("some key"); // Not available 這是要清楚的Message和類:MessageHeaderspublic class Message { private MessageHeaders headers; // getter}public class MessageHeaders implements Map<String, Object>, Serializable { // methods}
3 回答

慕碼人8056858
TA貢獻1803條經驗 獲得超6個贊
為了使用,MapAssert您需要直接提取MessageHeaders字段并將提取內容轉換為asInstanceOf:
assertThat(actual)
.extracting("headers")
.asInstanceOf(InstanceOfAssertFactories.MAP)
.containsKey("some key");

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
AssertJ Core 3.14.0 提供了一個新的extracting()
支持直接轉換的方式,所以你可以這樣寫:
assertThat(actual) ??.extracting(Message::getHeaders,?as(InstanceOfAssertFactories.MAP)) ??.containsKey("some?key");
請注意,這as()
是一個可選的語法糖,可提高可讀性。

寶慕林4294392
TA貢獻2021條經驗 獲得超8個贊
我想出的解決方案/解決方法是斷言地圖本身而不是使用提取。
assertThat(actual.getHeaders()) .containsKey("some key");
添加回答
舉報
0/150
提交
取消