2017-02-09 5 views
0

Я пытаюсь написать тест Junit код для следующего кода:Почему мой тест JUnit для этого набора кодов всегда возвращает ошибки?

public class RateofPay { 

    public double totalSalary(double work, double work2, double hour1, double hour2, double hour3) { 

    double salary1 = work * hour1; 
    double salary2 = work2 * hour2; 
    double salary3 = work * hour3; 
    double wages = salary1 + salary2 + salary3; 
    return wages; 
    } 
    } 

И это тест JUnit я писал:

public class WageTest { 

@Test 
public void testWage() { 
    RateofPay test=new RateofPay(); 
    double result=test.totalSalary(1.0, 2.0, 3.0, 4.0, 5.0); 
    assertEquals(12.0, result); 

} 

@Test 
public void testWage1() { 
    RateofPay test=new RateofPay(); 
    double result=test.totalSalary(6.0, 7.0, 8.0, 9.0, 10.0); 
    assertEquals(157.0, result); 

} 
} 

Проблема заключается в том, что каждый раз, когда я бегу тест JUnit, ни один из них не прошел тест. В результате говорится:

assertEquals (ожидается, фактический, дельта), чтобы сравнить число с плавающей точкой.

Мне интересно, что не так? Благодарю.

+1

Пожалуйста, поделитесь журналы отказов. – nullpointer

+0

Похоже, математика ошибается! это должно быть 16 и 171! – Santo

+0

Более подробная информация о дельтах доступна на http://stackoverflow.com/questions/5939788/junit-assertequalsdouble-expected-double-actual-double-epsilon –

ответ

4

При попытке сравнить double вы должны указать параметр delta. Кроме того, ваши утверждения неверны.

Они должны быть такими.

@Test 
    public void testWage() { 
     Solution test=new Solution(); 
     double result=test.totalSalary(1.0, 2.0, 3.0, 4.0, 5.0); 
     assertEquals(16.0, result, 0.0); 
    } 

    @Test 
    public void testWage1() { 
     Solution test=new Solution(); 
     double result=test.totalSalary(6.0, 7.0, 8.0, 9.0, 10.0); 
     assertEquals(171.0, result, 0.0); 

    } 

Например, первый тест будет иметь этот расчет:

double salary1 = 1 * 3; //3 
double salary2 = 2 * 4; //8 
double salary3 = 1 * 5; //5 
double wages = salary1 + salary2 + salary3; // 3 + 8 + 5 = 16 
+0

Вы могли бы упомянуть хотя бы в полупредложении * почему * нужно использовать некоторый * epsilon * при сравнении чисел с плавающей запятой в целом. – GhostCat

+0

Большое спасибо! – Yang

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