Whiteship's Note

'assertEquals'에 해당되는 글 1건

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

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. Favicon of http://younghoe.info/ BlogIcon 영회 2006.11.18 22:22 PERM. MOD/DEL REPLY

    지난 스터디에서 다룬 것인데...
    http://younghoe.info/256

    역시 경험은 공유되지 않기 때문에
    똑같은 내용을 다뤄도 배우는 사람이 얻는 것은 자기 경험의 크기에 국한된다는
    것을 니가 다시 한번 증명해주는구나.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.11.18 22:44 신고 PERM MOD/DEL

    헉 정말 본 기억이 확실히 있는데도... 미쳐 이 문제를 풀기에 생각이 나질 않았었네요.

    역시 해보질 않으면 듣고 봐도 자기 것이 될 수 없다는 걸 다시한번 느끼게 되네요.

Write a comment.