Whiteship's Note

assertEquals()는 같은 Type을 비교하라.

Java : 2006.11.18 21:40


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

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

API에는 다음의 메소드들이 있습니다.
이 중에서 제가 사용했던 메소드는 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

top




: 1 : ··· : 111 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : ··· : 140 :