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

标签 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 );

最佳答案

在测试 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/

相关文章:

java - 在按键时获取键码和键修饰符

在 Linux 中无法识别但在 OSX 中工作的 Java -XstartOnFirstThread 命令行选项

java - 如何在 java 中使用 mockito 测试文件大小?

java - 如何检查并防止更改 JTabbedPane 上的选项卡?

java - java ConcurrentHashMap中的segmentMask是什么意思

java - 通用 Controller 中 hasPermission 的参数

java - Facebook::在自动化测试中为测试 Facebook 用户更新 token

html - 如何让 Gradle 构建生成 HTML 测试报告而不是默认的 XML?

java - Mockito:模拟对象并添加到 ArrayList

java - 访问二维数组时出现 NullPointerException