我正在测试看两个对象是否相等但它返回false。有人可以向我解释为什么会这样吗?感谢。
public boolean equals(Object obj) {
if(obj instanceof SparsePolynomial)
{
return true;
}
return false;
}
@Test
public void testEqualsObj()
{
ArrayList<Integer> k = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d = new SparsePolynomial(k);
ArrayList<Integer> k2 = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d2 = new SparsePolynomial(k2);
Assert.assertTrue(d.equals(d2));
}
答案 0 :(得分:1)
没有足够的信息可以确定,但我怀疑:
equals
未定义为SparsePolynomial
的方法。也许你已经在一个超类......或一个不相关的类中定义了它。修改强>
@Override
注释来标记您打算 equals
方法来覆盖(或实现)超类或接口中定义的方法。 (这里没有任何区别,但它会告诉你你是否在方法签名上犯了错误。)equals
方法显然是假的。它只是测试obj
参数的类型,并忽略其状态。如上所述,每次测试一个true
实例与另一个SparsePolynomial
实例时,它应返回{{1}}。答案 1 :(得分:0)
请改为Assert.assertTrue(d.equals(d2));
答案 2 :(得分:0)
我已经尝试过您的代码并且测试通过了。
您可以找到我在这里使用的确切测试用例:
public class SparsePolynomialTest {
public static class SparsePolynomial {
private List<Integer> list;
public SparsePolynomial(List<Integer> list) {
this.list = list;
}
public boolean equals(Object obj) {
if (obj instanceof SparsePolynomial) {
return true;
}
return false;
}
}
@Test
public void testEqualsSparse() {
ArrayList<Integer> k = new ArrayList<Integer>();
k.add(1);
k.add(3);
SparsePolynomial d = new SparsePolynomial(k);
ArrayList<Integer> k2 = new ArrayList<Integer>();
k2.add(1);
k2.add(3);
SparsePolynomial d2 = new SparsePolynomial(k2);
Assert.assertEquals(true, d.equals(d2));
}
}