2013-12-12 6 views
0

JUnit 테스트를 실행하려고했지만 코드가 테스트를 통과한다고해도 실패하지 않습니다. 어떤 아이디어? 여기예상 결과가 정확하더라도 JUnit 테스트가 실패합니다.

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; 
} 

가 있습니다 :

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))); 
} 

이 변환을 어떻게해야하는 방법은 다음과 같습니다 나는이 테스트입니다

기능, 변환 계수 및 테스트를 뒀다 나는 다음을 사용했다 :

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

코드를 수정하십시오 ... –

+0

직면 한 문제가 정확히 무엇입니까? 또한 코드 서식을 지정하십시오. – Nishan

+0

'testValue'는 어디에서 왔습니까? 그리고'mc'는 어디에서 오는 것입니까? 전달 될 때 실제 가치는 무엇입니까? 이것이 당신의 실패의 원인이 될 수 있습니다 - 만약'testValue'가 테스트 클래스의 프로퍼티라면 당신은 무효 한 데이터를 가지고 있습니다. – Makoto

답변

4

부동 소수점의 동등성을 테스트하는 동안 반올림 오류와 관련된 일부 문제를 해결할 수 있습니다. 이러한 종류의 문제를 해결하기 위해 마지막 두 개가 세 개의 이중 매개 변수가있는 assertEquals 메서드가 있으며 그 중 마지막 매개 변수는 델타입니다. 다음과 같이 어설 션문을 변경해보십시오.

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으로 정의됩니다.

관련 문제