gpt4 book ai didi

java - JUnit - 比较对象数组

转载 作者:行者123 更新时间:2023-12-02 01:51:27 25 4
gpt4 key购买 nike

我有一个测试,旨在测试从数据库返回的对象数组(一组使用规则包装类的规则)的内容:

[
{
id: 1,
name: "rule_1",
description: "this rule will check something",
},
]


@Test
public void testQueryRules() throws IOException {

final List<Rule> rules = ruleDB.queryRules();
final String expectedRuleId = "1";
final String expectedName = "rule_1";
final String expectedDescription = "this rule will check something";

final Rule rule = new Rule(expectedRuleId, expectedName, expectedDescription);
final List<Rule> expectedRules = new ArrayList<Rule>();
expectedRules.add(rule);

expectedRules.forEach(expectedRule -> {
System.out.println("RULE ID " + expectedRule.getRuleId());
System.out.println("RULE NAME " + expectedRule.getRuleName());
System.out.println("RULE DESCRIPTION " + expectedRule.getDescription());
});

rules.forEach(actualRule -> {
System.out.println("ACTUAL RULE ID " + actualRule.getRuleId());
System.out.println("ACTUAL RULE NAME " + actualRule.getRuleName());
System.out.println("ACTUAL DESCRIPTION " + actualRule.getDescription());
});

System.out.println("MATCHED " + Arrays.deepEquals(expectedRules.toArray(), rules.toArray()));
System.out.println("MATCHED AGAIN " + Arrays.equals(expectedRules.toArray(), rules.toArray()));

Assert.assertArrayEquals(expectedRules.toArray(), rules.toArray());
}

如您所见,我尝试使用 Arrays.equals()Arrays.deepEquals()assertArrayEquals()。尽管预期和实际的输出相同,但这些似乎都没有给出成功的测试:

预期:

RULE ID: 1
RULE NAME: "rule 1",
RULE DESCRIPTION: "this rule will check something",

实际:

ACTUAL RULE ID: 1
ACTUAL RULE NAME: "rule 1",
ACTUAL RULE DESCRIPTION: "this rule will check something"

在 Java 中测试对象数组的标准方法是什么?看起来它失败了,因为即使内容相同,指针引用也是不同的。

最佳答案

您可能想使用assertj为了那个原因。特别是它的 usingFieldByFieldElementComparator

import java.util.Arrays;
import java.util.List;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

class MyTests {
static class Rule {
final String id;
final String name;
final String description;

Rule(String id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}

// no equals, no hashCode
}

@Test
void rulesShouldEqual_whenTheirPropertiesEqual() {
Rule actualRule1 = new Rule("id1", "name1", "description1");
Rule actualRule2 = new Rule("id2", "name2", "description2");
List<Rule> actual = Arrays.asList(actualRule1, actualRule2);

Assertions.assertThat(actual).usingFieldByFieldElementComparator().containsExactly(
new Rule("id1", "name1", "description1"),
new Rule("id2", "name2", "description2"));
}
}

关于java - JUnit - 比较对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926445/

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