2017-11-07 10 views
-1

수정 후 bigdecimal 값이 계속 스케일링되도록 설정되어 있는지 테스트 할 때 초기화 오류가 발생합니다. 이클립스는 어설 션이 더 이상 사용되지 않는다고 말합니다. bigDecimal의 값을 double로 비교할 때 어설 션을 올바르게 작성하는 방법은 무엇입니까?BigDecimal 값 테스트

public Account(double startBalance){ 
     this.acctId=currId; 
     currId= currId + counter; 
     balance = new BigDecimal(startBalance); 
     balance = balance.setScale(2, BigDecimal.ROUND_FLOOR); 
    } 

테스트 케이스 :

@Test 
public void testIfBigDecimalIsSetToScale(){ 
    BigDecimal depositAmountToTest = new BigDecimal(34.12345678); 
    BigDecimal expectedAmount = new BigDecimal(34.12); 
    classUnderTest.setCorrection(depositAmountToTest); 

    assertEquals(expectedAmount.doubleValue(), classUnderTest.getBalance()) 
} 
+0

당신은 bigdecimal의 스케일되지 않은 값을 사용하고 그것에 대한 어서션을 만들 수 있습니다. –

+1

현재 주장 (초안)의 코드 샘플을 제공해주십시오. 오류가 더 분명 해지면 – Sauer

+0

내 이슈는 어카운트 후에 초기 BigDecimal이 여전히 소수점 둘째 자리로 반올림되는지 확인하는 어설 션을 생성합니다. –

답변

1

는 규모의 기본값으로, 이중으로 생성자를 피하십시오.

BigDecimal depositAmountToTest = new BigDecimal("34.12345678"); // Scale 8 
BigDecimal expectedAmount = new BigDecimal("34.12"); // Scale 2 
+0

해답을 가져 주셔서 감사합니다! 어서션에 compareTo 메서드를 사용해야합니까? BigDecimal 객체의 값을 반환하는 메소드를 찾기 위해 google과 java oracle 문서를 검색해 왔습니다. 나는 그것이 어떻게 작동하는지에 대한 깊은 이해가 없다고 생각한다. 나는이 값을 비교하기 위해 doubleValue 메서드를 사용했지만 이클립스는 이것에 만족하지 않았다. –

+0

'compareTo'는 스케일에 관계없이 비교합니다. 'equals'는'new BigDecimal ("1.00"). equals (새로운 BigDecimal ("1"))'은 스케일이 다르기 때문에 false라는 것을 말합니다. 그래서 여기에서'Assert.assertEquals (expectedAmount, depositAumountToTest);'(비참하게 실패 함)를 할 수 있습니다. –