자바의 실수 표현의 부정확성에서 이 문제를 해결하기 위해 반올림을 사용하는 방법을 테스트 해보다가 숫자는 같은데 assertion을 통과하지 않는 이상한 현상의 문제점의 원인을 찾지 못하다가. 민재님 덕분에 해결됐습니다. 감사합니다. 🙂

assertion을 할때 같은 type끼리 비교를 해야되는데.. 하나는 double이고 하나는 BigDecimal이였기 때문에 같은 0.9여도fail로 나온 것입니다. 결국 같은 타입의 객체까리 비교를 했어야 합니다.

API에는 다음의 메소드들이 있습니다.
1399376892.bmp이 중에서 제가 사용했던 메소드는 Object 타입의 매개변수 두 개를 비교 했던 것인데요. Object type으로 받아들인 두 개의 클래스 타입이 같지 않으면 안에 들어있는 값이 같더라도 테스트는 실패하게 되는 겁니다.

이런 시행착오를 예방하려면 다른 메소드를 사용해야 합니다. 매개변수가 세개인 것은 사용하면 될 것 같습니다. assertion(0.9, value); //value는 BigDecimal 타입
이 경우에는 에러가 발생하지 않습니다.(jdk1.5) 0.9가 Auto Boxing으로 Double 타입이 되고 value는 BigDecimal이기 때문에 위에 있는 첫번째 메소드에 들어가게 됩니다.

그렇기 때문에 double 타입으로 비교하도록
assertEquals(0.9, value.doubleValue());
이렇게 하거나 같은 객체 타입으로 비교하도록
assertEquals(new BigDecimal(0.9, mc), value);
이렇게 해야겠습니다.

“두 값을 비교할 땐 같은 타입인지 확인하라.”
는 매우 단순하지만 값진 교훈을 얻었습니다. 민재님 다시 한번 감사합니다. (__)/

test code
[#M_ more.. | less.. |
@Test
   public void bigDecimalFormat(){
       BigDecimal value = new BigDecimal(0.3);
       BigDecimal three = new BigDecimal(3);
       MathContext mc = new MathContext(1);
       value = value.multiply(three, mc);
       assertEquals(0.9, value.doubleValue());
       assertEquals(new BigDecimal(0.9, mc), value);
   }
_M#]