문제
이 게시물을 인용합니다 Exubero 's 기입. 이 항목은 단위 테스트를하는 모든 사람에게 도움이 될 것이라고 생각합니다.
Junit의 Assert 클래스에 정의 된 Assert로 시작하는 많은 다른 방법이 있습니다. 이 방법들 각각은 그들이 주장하는 것에 대해 약간 다른 주장과 의미론을 가지고 있습니다.
다음은 AssertTrue의 불규칙한 사용을 보여줍니다.
assertTrue("Objects must be the same", expected == actual);
assertTrue("Objects must be equal", expected.equals(actual));
assertTrue("Object must be null", actual == null);
assertTrue("Object must not be null", actual != null);
일부 단위 테스트 전문가들은 위의 코드가 다음과 같이 더 잘 작성 될 수 있다고 지적했습니다.
assertSame("Objects must be the same", expected, actual);
assertEquals("Objects must be equal", expected, actual);
assertNull("Object must be null", actual);
assertNotNull("Object must not be null", actual);
적절한 'assertxxx ()'를 사용하는 장점 중 하나는 단위 테스트의 가독성을 증가시킵니다. 누구든지 적절한 'assertxxx ()'를 사용함으로써 어떤 다른 이점을 지적 할 수 있습니까?
해결책
나는 Java 개발자가 아니며 어설 션이 실패 할 때 Junit이 어떤 출력을하는지 모르겠습니다. Assertequals와 같은 것을 사용할 때 출력이 더 나은 오류 정보를 사용하고있는 많은 단위 테스트 프레임 워크.
내가 말하는 내용을 보여 드리겠습니다.
assertTrue("Objects must be equal", "One" == "Two");
assertEquals("Objects must be equal", "One", "Two");
첫 번째 경우 다음과 같은 오류 출력을 가질 수 있습니다.
오류 : 실제 예상 실제는 거짓이었습니다.
두 번째 경우 출력 :
오류 : Exected "One"실제는 "2"입니다.
보시다시피 두 번째 사례는 더 나은 의미있는 정보를 제공합니다.
다른 팁
위의 @Vadim DAID 외에도 적절한 어설 싱트를 사용하면 테스트의 COP-COPY-PASTER가 생성 한 버그에 대해 보호 할 수 있습니다.
예로서
assertTrue("Objects must not be the same", expected != actual);
그런 다음 복사 및 수정됩니다
assertTrue("Objects must not be the same", newobject == actual);
코드가 변경 되고이 테스트가 실패하고 댓글이 다음 개발자가 새 버그를 도입하는 방식으로 코드를 "수정"하도록 바보입니다.
CUT-COPY-PASTE-CODE가 다음과 같습니다.
assertFalse("Objects must be the same", newobject == actual);
의견의 불만, 어설 션 및 테스트 사례가 더 눈에 띄게 될 수 있습니다.
그리고 네, 이런 일이 일어나는 것을 보았습니다.