【发布时间】:2020-05-06 17:26:38
【问题描述】:
我觉得我在这里遗漏了一些明显的东西,但是文档让我失望了。我试图比较两张地图,同时忽略了 assertJ 中的一组字段。我想看看这个断言通过:
private static final String[] IGNORED_FIELDS = { "ignored", "another" };
private static final Map<String, Object> TEST_PAYLOAD = ImmutableMap.of("test", "payload", "example", "value", "ignored", "field");
private static final Map<String, Object> COMPARISON_PAYLOAD = ImmutableMap.of("test", "payload", "example", "value", "another", "ignored field");
// assert fails
assertThat(TEST_PAYLOAD).isEqualToIgnoringGivenFields(COMPARISON_PAYLOAD, IGNORED_FIELDS);
但是,实际发生的比较是映射对象,并且在大小、modCount、阈值等方面失败。此外,在比较表、键和值时,它实际上并没有忽略列出的字段。我也尝试过使用
assertThat(TEST_PAYLOAD).usingRecursiveComparison().ignoringGivenFields(IGNORED_FIELDS).isEqualTo(COMPARISON_PAYLOAD);
但这失败了,因为它试图比较被忽略的字段。这里有一个优雅的解决方案,还是我必须手动遍历键?
【问题讨论】:
-
ImmutableMap.of()存在吗?Map.of()已经不可变了? -
@WJS 抱歉,这来自 Google Guava,但它们在所有意图和目的上都是相同的。
-
好的,很遗憾我无法提供任何帮助。但是您可能应该将 Guava 标签添加到您的问题中。