Java和junit:多项式方法测试问题的派生

Java和junit:多项式方法测试问题的派生,java,junit,methods,derivative,Java,Junit,Methods,Derivative,我正试图完成我的junit测试,以便找到多项式方法的导数,但我在使它工作时遇到了一些困难。方法如下: public Polynomial derivative() { MyDouble a = new MyDouble(0); MyDouble b = this.a.add(this.a); MyDouble c = this.b; Polynomial poly = new Polynomial (a, b, c); return poly; } 下面是jun

我正试图完成我的junit测试,以便找到多项式方法的导数,但我在使它工作时遇到了一些困难。方法如下:

    public Polynomial derivative() {
  MyDouble a = new MyDouble(0);
  MyDouble b = this.a.add(this.a);
  MyDouble c = this.b;
  Polynomial poly = new Polynomial (a, b, c);
  return poly;
 } 
下面是junit测试:

    public void testDerivative() {
  MyDouble a = new MyDouble(2), b = new MyDouble(4), c = new MyDouble(8);
  MyDouble d = new MyDouble(0), e = new MyDouble(4), f = new MyDouble(4);

  Polynomial p1 = new Polynomial(a, b, c);
  Polynomial p2 = new Polynomial(d,e,f);
  assertTrue(p1.derivative().equals(p2));
 }

我不太清楚它为什么不起作用……我一遍又一遍地检查它,我知道我遗漏了一些东西。感谢大家提供的帮助,非常感谢。

是否正确实现了
equals
方法?

您的
多项式
类是否实现了
equals

否则将进行对象级比较。这意味着两个对象的指针必须匹配才能相等。必须实现
equals
以显示
多项式(a、b、c)
=
多项式(d、e、f)

我不知道多项式的数据结构是什么,但您可以这样做:

public boolean equals(Polynomial p) 
{
    // where a b and c are private MyDouble variables 
    if (p.a == this.a && p.b == this.b && p.c == this.c) 
        return true;
    else 
        return false;
}

前两个答案暗示的是,如果多项式类没有实现equals(),那么您在测试中使用的是Object.equals()。Object.equals()检查p1.derivative()和p2是否是同一个对象(它们显然不是),以验证p1.derivative()和p2是否具有相同的值


通常的解决方案是实现多项式.equals(多项式rhs),这将确保每边上的三个MyDouble是相等的()。当然,您还必须确保MyDouble.equals(MyDouble rhs)做的事情是正确的。

与您最初的问题无关:如果您还不熟悉检查浮点数是否相等很容易出错这一事实,您应该研究一下。例如,JScience类
多项式
具有正确的实现。