即使预期结果正确,JUnit测试也会失败

时间:2013-12-12 04:17:16

标签: java 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 :(得分:4)

在测试浮点数的相等性时,通常会出现一些与舍入错误有关的问题。为了解决这类问题,有一个assertEquals方法有三个双参数,其中最后一个是delta。您可以尝试将assert语句更改为以下内容:

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

您应该根据需要调整delta。 Delta定义为the maximum delta between expected and actual for which both numbers are still considered equal