[java] 어설 션 대 JUnit 어설 션

오늘 저는 JUnit 어설 션 대신 자바 어설 션이있는 JUnit 테스트 케이스를 보았습니다. 다른 하나를 선호하는 데 중요한 장점이나 단점이 있습니까?



답변

JUnit4에서 JUnit assert에 의해 발생 된 예외 (실제로 Error)는 java assert키워드 (AssertionError)에 의해 발생 된 오류 와 동일하므로 assertTrue차이점을 알 수없는 스택 추적과 정확히 동일 하고 다릅니다.

즉, 어설 션은 JVM에서 특수 플래그를 사용하여 실행해야하므로 JUnit 테스트가 실행될 때 누군가 해당 플래그로 시스템을 구성하는 것을 잊었 기 때문에 많은 테스트가 통과하는 것처럼 보입니다. 좋지 않습니다.

일반적으로이 때문에 JUnit을 사용하는 assertTrue것이 더 나은 방법 이라고 주장합니다 . 테스트 실행을 보장하고 일관성을 보장하고 (때로는 assertThatJava 키워드가 아닌 다른 assert를 사용 하거나) JUnit의 동작이 나중에 변경 될 것입니다 (예 : 일종의 필터 또는 기타 향후 JUnit 기능에 연결). 코드는이를 활용할 수 있습니다.

자바에서 assert 키워드의 실제 목적은 런타임 패널티없이 끌 수 있도록하는 것입니다. 단위 테스트에는 적용되지 않습니다.


답변

JUnit 어설 션은 내장 assert명령문 보다 더 풍부한 API를 제공하고 더 중요한 것은 JVM 인수 assert가 필요한 -ea.


답변

테스트가 실패하면 더 많은 정보를 얻을 수 있습니다.

assertEquals(1, 2); 결과 java.lang.AssertionError: expected:<1> but was:<2>

vs

assert(1 == 2); 결과 java.lang.AssertionError

메시지 인수를 추가하면 더 많은 정보를 얻을 수 있습니다. assertEquals


답변

테스트 케이스에서 JUnit 어설 션을 사용하고 코드에서 Java의 어설 션을 사용한다고 말하고 싶습니다. 즉, 실제 코드는 명백한 것처럼 JUnit 종속성을 갖지 않아야하며 테스트 인 경우 어설 션이 아닌 JUnit 변형을 사용해야합니다.


답변

JUnit을 사용하는 경우 JUnit 어설 션을 사용해야합니다. assertTrue()기본적으로와 동일합니다 assert. 그렇지 않으면 왜 JUnit을 사용합니까?


답변

반짝이고 새로운 것을 독점적으로 사용하지만 1.4SE까지 Java에 도입되지 않은 것을 사용하는 경우에는 적용되지 않을 수 있습니다. 따라서 이전 기술이있는 환경에서 작업해야하는 경우 호환성을 위해 JUnit을 사용할 수 있습니다.


답변