2010-03-30 1 views
2

im пытается завершить мое тестирование юнита для поиска производной от полиномиального метода, и у меня возникают проблемы с его работой. здесь метод:Java и 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)); 
} 

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

+0

Не связанный с вашим первоначальным вопросом: если вы еще не знакомы с тем, что проверка чисел с плавающей точкой для равенства очень легко ошибиться, вы должны изучить ее. – VoiceOfUnreason

ответ

0

Использует ли ваш 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; 
} 
3

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

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

+1

Например, класс _YScience_ 'Polynomial' имеет правильную реализацию. http://jscience.org/api/org/jscience/mathematics/function/Polynomial.html – trashgod

Смежные вопросы