오늘 저는 JUnit 어설 션 대신 자바 어설 션이있는 JUnit 테스트 케이스를 보았습니다. 다른 하나를 선호하는 데 중요한 장점이나 단점이 있습니까?
답변:
JUnit4에서 JUnit assert에 의해 발생 된 예외 (실제로 Error)는 java assert
키워드 (AssertionError)에 의해 발생 된 오류 와 동일하므로 assertTrue
차이점을 알 수없는 스택 추적과 정확히 동일 하고 다릅니다.
즉, 어설 션은 JVM에서 특수 플래그를 사용하여 실행해야하므로 JUnit 테스트가 실행될 때 누군가 해당 플래그로 시스템을 구성하는 것을 잊었 기 때문에 많은 테스트가 통과하는 것처럼 보입니다. 좋지 않습니다.
일반적으로이 때문에 JUnit을 사용하는 assertTrue
것이 더 나은 방법 이라고 주장합니다 . 테스트 실행을 보장하고 일관성을 보장하고 (때로는 assertThat
Java 키워드가 아닌 다른 assert를 사용 하거나) JUnit의 동작이 나중에 변경 될 것입니다 (예 : 일종의 필터 또는 기타 향후 JUnit 기능에 연결). 코드는이를 활용할 수 있습니다.
자바에서 assert 키워드의 실제 목적은 런타임 패널티없이 끌 수 있도록하는 것입니다. 단위 테스트에는 적용되지 않습니다.
테스트가 실패하면 더 많은 정보를 얻을 수 있습니다.
assertEquals(1, 2);
결과 java.lang.AssertionError: expected:<1> but was:<2>
vs
assert(1 == 2);
결과 java.lang.AssertionError
메시지 인수를 추가하면 더 많은 정보를 얻을 수 있습니다. assertEquals
assert 1==2: "1 is not 2";
.
assert
정확성 확인을 위해 - 바람직 할 수있다 것 성능에 영향을 미칠 수 있으므로 최적의 장애인 기본적으로 있습니다. 그러나 내 경험에 따르면 대부분의 주장은 항상 켜져 있어야합니다.
테스트 케이스에서 JUnit 어설 션을 사용하고 코드에서 Java의 어설 션을 사용한다고 말하고 싶습니다. 즉, 실제 코드는 명백한 것처럼 JUnit 종속성을 갖지 않아야하며 테스트 인 경우 어설 션이 아닌 JUnit 변형을 사용해야합니다.
JUnit을 사용하는 경우 JUnit 어설 션을 사용해야합니다. assertTrue()
기본적으로와 동일합니다 assert
. 그렇지 않으면 왜 JUnit을 사용합니까?
Assert
에는 더 많은 상용구가 필요합니다. assert
JUnit이 없으면 전체 프레임 워크를 작성해야합니다.