等于(Obj)测试

时间:2010-11-24 21:19:12

标签: java

我正在测试看两个对象是否相等但它返回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));
}

3 个答案:

答案 0 :(得分:1)

没有足够的信息可以确定,但我怀疑:

  • equals未定义为SparsePolynomial的方法。也许你已经在一个超类......或一个不相关的类中定义了它。
  • 更改某些代码后,您尚未重新编译所有相关类。

修改

  1. 最好使用@Override注释来标记您打算 equals方法来覆盖(或实现)超类或接口中定义的方法。 (这里没有任何区别,但它会告诉你你是否在方法签名上犯了错误。)
  2. 您对用于测试的Assert方法的更改应该对结果没有影响。
  3. 您展示的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));
    }
}