2013-12-12 3 views
0

Я попытался запустить JUnit-тест, но он продолжает терпеть неудачу - даже если код должен пройти тест. Любые идеи почему? Я поставил функцию, коэффициент преобразования и тестОшибка JUnit, даже если ожидаемый результат верен

Это испытание:

private static MathContext mc = new MathContext(12, RoundingMode.HALF_EVEN); 
public static final BigDecimal testValue = new BigDecimal(123456.1234567); 

@Test 
public final void testconvertFathomToMetersDM3() {  
    BigDecimal expectedResult = unitConverter.convertFathomToMetersDM3(testValue); 
    assertTrue(expectedResult.equals(new BigDecimal(1.234561234567E+21, mc))); 
} 

Это метод, который должен выполнить преобразование:

private BigDecimal result; 
private static MathContext mc = new MathContext(12, RoundingMode.HALF_EVEN); 

public final BigDecimal convertMetersToFathomDM3(BigDecimal value) { 
    result = value.divide(ConversionFactors.FATHOM_DMA3, mc); 
    return result; 
} 

Вот является переводной коэффициент, который я использовал:

public static final BigDecimal FATHOM_DMA3 = new BigDecimal(1.875E+1); 
+1

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

+0

В чем проблема, с которой вы столкнулись? Кроме того, отформатируйте свой код. – Nishan

+0

Где находится 'testValue'? И откуда происходит 'mc'? Какова его фактическая ценность при передаче? Это может привести к вашим сбоям - если 'testValue' является свойством тестового класса, то у вас есть недопустимые данные. – Makoto

ответ

4

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

final double delta = 0.00001; 
BigDecimal result = unitConverter.convertFathomToMetersDM3(testValue); 
Assert.assertEquals(1.234561234567E+21, result.doubleValue(), delta); 

Вы должны отрегулировать дельту с вашими потребностями. Дельта определяется как the maximum delta between expected and actual for which both numbers are still considered equal.

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