assertArrayEquals(对象[] O1,对象[] O 2)无法找到
题
我的设置:
Netbeans 6.7
Java6
JUnit 4.5 added as the Test libraries
当我尝试在二级阵列通过(铸造为对象[])我得到错误“无法找到符号”和我的测试情况下将无法编译。
我没有与其他的断言语句的问题,正如我所说,我使用JUnit 4.5库。
有没有人对如何解决此问题,或观察到了这种行为古怪线索?
NetBeans是能够通过其自动完成找到这个函数声明,但它是无法找到它位于何处在,或可以导航到源。
样品的编号:
CustomObject[] coa = { new CustomObject() ....}
CustomObject[] expected = { new CustomObject() ... }
assertArrayEquals((Object[])coa, (Object[])expected);
解决方案
好了,Assert.assertArrayEquals是一个静态方法,你可以从你的代码正在看:
org.junit.Assert.assertArrayEquals(....)
但你给的代码,你试图使用它作为一个实例方法:
assertArrayEquals((Object[])coa, (Object[])expected);
如果你静态导入了Assert.*
或Assert.assertArrayEquals
这只会工作。
现在,如果你的另一说法是工作,我的猜的是,你仍然TestCase
获得(即编写JUnit测试的“老”的方式),以及您的断言呼吁TestCase.assertEquals
等
如果你可以给一个简短而完整的例子单元测试的其中一个断言的作品,但assertArrayEquals
不,我们也许可以找出发生了什么事情。
其他提示
您不必完全限定的断言或投你的数组对象数组。只需导入的JUnit的适当部分,并在你的阵列直接通过。你应该从你的,虽然扭转例如参数顺序 - 你所期望首先出现(“expecteds”),你实际上从测试获得排第二(“统计数据”)。这工作正常:
import org.junit.*;
import static org.junit.Assert.*;
public class TestJUnitActuallyWorks {
@Test
public void myArraysShouldBeIdentical() {
CustomObject one = new CustomObject();
CustomObject two = new CustomObject();
CustomObject three = new CustomObject();
CustomObject[] expecteds = { one, two, three };
CustomObject[] actuals = { one, two, three };
assertArrayEquals(expecteds, actuals);
}
private static class CustomObject {}
}
问题是,编译器拒绝寻找到实际的类..但它会与abosulte路径: org.junit.Assert.assertArrayEquals(....
相反烦人我可以补充。
我想除了他的两个数组实际上包含相同的对象SingleShot的答案。如果什么的对象是不一样的实际对象(不同的对象相同的值,但应该是相等的)。
所以我想我会提高他的答案来说明如何做到这一点。
@Test
public void myArraysShouldBeIdentical() {
CustomObject one1 = new CustomObject("one");
CustomObject two1 = new CustomObject("two");
CustomObject three1 = new CustomObject("three");
CustomObject one2 = new CustomObject("one");
CustomObject two2 = new CustomObject("two");
CustomObject three2 = new CustomObject("three");
CustomObject[] expecteds = { one1, two1, three1 };
CustomObject[] actuals = { one2, two2, three2 };
assertArrayEquals(expecteds, actuals);
}
private static class CustomObject {
public String value;
CustomObject(String inValue)
{
value = inValue;
}
@Override
public int hashCode() {
return value.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof CustomObject))
return false;
CustomObject rhs = (CustomObject) obj;
return value == rhs.value;
}
}