Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组的断言错误_Java_Arrays_Junit4_Assertion - Fatal编程技术网

Java 数组的断言错误

Java 数组的断言错误,java,arrays,junit4,assertion,Java,Arrays,Junit4,Assertion,您没有复制元素,只需创建另一个指向相同元素的数组。因此,如果稍后您的测试用例修改了数组技能,您也将修改原始数组。我猜这就是导致断言失败的原因。您提到您的测试用例使用了assertSame。这将查找引用相等,并要求a==b 您的代码将创建一个副本。副本永远不会与原件具有同等的参考价值。在某些重写对象方法等于的类中,assertEquals可能会通过。对于数组,请尝试使用assertArrayEquals 例如,该测试应通过: @Test(timeout = 1000) public void t

您没有复制元素,只需创建另一个指向相同元素的数组。因此,如果稍后您的测试用例修改了数组技能,您也将修改原始数组。我猜这就是导致断言失败的原因。

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

您的代码将创建一个副本。副本永远不会与原件具有同等的参考价值。在某些重写
对象
方法
等于
的类中,
assertEquals
可能会通过。对于数组,请尝试使用
assertArrayEquals

例如,该测试应通过:

@Test(timeout = 1000) 
public void testGetSkills() { 
    instance.setSkills(skills); 
    assertSame("The returned skill array should be the same", instance.getSkills(), skills); 
}
但这项测试将失败:

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

你应该清楚这是为什么。

你能把你的代码格式化得更好,并发布测试吗?我不确定是否有错误,但为什么你不直接设置skills=s而不是在整个数组中循环?@Pescis或者如果你明确需要一个副本,就使用
System.arrayCopy()
。如果你真的想要一个副本,那么就使用。不需要重新发明轮子。您的代码中缺少一个
}
。然后发布测试代码。首先,将类声明的大小写颠倒:
public class-Person
Public Class person
不会编译。我不想给出相同的引用。因为以后阵列s会改变,这也会改变技能,我不希望发生这种情况。。。JUnit测试用例是:@test(timeout=1000)public void testGetSkills(){instance.setSkills(skills);assertSame(“返回的技能数组应该相同”,instance.getSkills(),skills);}您不想这样做,但这就是您正在做的。也许你应该主张平等,而不是同样的内疚,我现在明白了,非常感谢你。。。我不知道assert检查引用,这就是为什么我在其中遇到问题的原因。再次感谢:)很高兴我能帮上忙:)文档中列出了所有可用的断言类型
@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});
}