gpt4 book ai didi

java - 使用assertJ方法 containsOnly() 比较自定义对象的数组

转载 作者:行者123 更新时间:2023-12-01 16:50:37 24 4
gpt4 key购买 nike

我的自定义对象如下所示:

@Accessors(chain = true)
@Getter
@Setter
@AllArgsConstructor
@ToString
public class SocialLink {

private String platform;

private String link;
}

我的测试代码如下所示:

SocialLink[] arr1 = new SocialLink[] {
new SocialLink("Facebook", "Facebook Link"),
new SocialLink("Google", "Google Link")
};
SocialLink[] arr2 = new SocialLink[] {
new SocialLink("Google", "Google Link"),
new SocialLink("Facebook", "Facebook Link")
};
assertThat(arr1).containsOnly(arr2);

失败日志:

java.lang.AssertionError: 
Expecting:
<[SocialLink(platform=Facebook, link=Facebook Link),
SocialLink(platform=Google, link=Google Link)]>
to contain only:
<[SocialLink(platform=Google, link=Google Link),
SocialLink(platform=Facebook, link=Facebook Link)]>
elements not found:
<[SocialLink(platform=Google, link=Google Link),
SocialLink(platform=Facebook, link=Facebook Link)]>
and elements not expected:
<[SocialLink(platform=Facebook, link=Facebook Link),
SocialLink(platform=Google, link=Google Link)]>

containsOnly() 方法可以很好地处理字符串数组,但为什么它不适用于自定义对象数组?

最佳答案

如果您不想或无法覆盖 equals,则可以尝试调用 usingRecursiveComparison 或更细粒度的替代方法 ignoringOverriddenEqualsForTypesignoringOverriddenEqualsForFieldsignoringOverriddenEqualsForFieldsMatchingRegexes

 assertThat(links1).usingRecursiveComparison()
.ignoringCollectionOrder()
.isEqualTo(expectedLinks);

请注意,递归比较目前仅提供 isEqualTo 断言。

参见https://assertj.github.io/doc/#assertj-core-recursive-comparison了解详情。

关于java - 使用assertJ方法 containsOnly() 比较自定义对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61699018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com