我试图运行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 );
答案 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
。