我尝试运行 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 );
最佳答案
在测试 float 的相等性时,经常会出现一些有关舍入错误的问题。为了解决此类问题,有一个带有三个双参数的 assertEquals
方法,其中最后一个是 delta。您可以尝试将断言语句更改为以下内容:
final double delta = 0.00001;
BigDecimal result = unitConverter.convertFathomToMetersDM3(testValue);
Assert.assertEquals(1.234561234567E+21, result.doubleValue(), delta);
您应该根据需要调整增量。 Delta 定义为预期值与实际值之间的最大差值,且两个数字仍被视为相等
。
关于java - 即使预期结果正确,JUnit 测试也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534953/