gpt4 book ai didi

java - 数组断言错误

转载 作者:行者123 更新时间:2023-12-01 14:47:19 24 4
gpt4 key购买 nike

Public class Person {
private Skill[] skills;

public Skill[] getSkills() {
return skills;
}

public void setSkills(Skill[] s) {
if (s!= null) {
skills = new Skill[s.length];

for (int i = 0; i < s.length; i++) {
skills[i] = s[i];
}
}
}
}
}

假设有一个类技能。问题是 Junit 中有一个测试用例,它测试 setSkill ugiving s = 技能数组本身的方法。此测试用例返回断言错误告诉我返回的技能数组应该相同知道当我将getSkill更改为给两个数组相同时引用测试用例通过。

有人可以帮我吗?如何复制元素而不是引用?为什么测试用例失败?

测试用例是:

@Test(timeout = 1000) 
public void testGetSkills() {
instance.setSkills(skills);
assertSame("The returned skill array should be the same", instance.getSkills(), skills);
}

最佳答案

您提到您的测试用例使用assertSame。这会查找引用相等性,并要求 a == b

您的代码创建一个副本。副本永远不会与原始版本具有相同的引用。在某些重写 Object 方法 Equals 的类中,assertEquals 可能会通过。对于数组,请尝试使用 assertArrayEquals

例如,此测试应该通过:

@Test
public void assertArrayEqualsTest() throws Exception {
assertArrayEquals(new int[]{1, 2, 3}, new int[]{1, 2, 3});
}

但是这个测试将会失败:

@Test
public void assertSameTest() throws Exception {
assertSame(new int[]{1, 2, 3}, new int[]{1, 2, 3});
}

你应该清楚这是为什么。

关于java - 数组断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294186/

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