문제

이 게시물을 인용합니다 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);

의견의 불만, 어설 션 및 테스트 사례가 더 눈에 띄게 될 수 있습니다.

그리고 네, 이런 일이 일어나는 것을 보았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top