Java и junit: производная от проблемы тестирования полиномиального метода - PullRequest
2 голосов
/ 31 марта 2010

Я пытаюсь закончить свой тест 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;
 } 

и вот тест джунта:

    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));
 }

Я не слишком уверен, почему это не работает ... Я перебирал это снова и снова, и я знаю, что что-то упустил. спасибо всем за оказанную помощь, ценю это

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

На что намекают предыдущие два ответа, так это то, что если класс Polynomial не реализует equals (), то вы используете Object.equals () в тесте. Object.equals () проверяет, что p1.derivative () и p2 - это один и тот же объект (которым они явно не являются), когда вы хотите убедиться, что p1.derivative () и p2 имеют одинаковое значение ....

Обычным решением было бы реализовать Polynomial.equals (Polynomial rhs), который бы гарантировал, что три MyDoubles на каждой стороне равны (). Конечно, вы также должны убедиться, что MyDoubles.equals (MyDouble rhs) делает все правильно.

0 голосов
/ 31 марта 2010

Ваш класс Polynomial реализует equals?

В противном случае происходит сравнение на уровне объектов. Это означает, что указатели двух объектов должны совпадать, чтобы он был равен. Вы должны реализовать equals, чтобы показать, что значения Polynomial(a, b, c) == Polynomial(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;
}
0 голосов
/ 31 марта 2010

Правильно ли реализован метод equals?

...