assertDoesNotThrow
-
[Java] Test코드에서 Assertions를 통해 오류 잡기2023.03.12
[Java] Test코드에서 Assertions를 통해 오류 잡기
Assertions를 통해 오류를 던지는지 확인하기
org.junit.Assert 와 org.assertj.Assertions의 차이점
org.junit.Assert
: 가장 널리 사용되는 Java 테스트 프레임워크 중 하나인 JUnit 테스트 프레임워크의 일부이다. JUnit은 예상 결과를 실제 결과와 비교하여 확인할 수 있는 어설션 메서드 세트를 제공한다. 예를 들어 assertEquals(expected, actual)를 사용하여 두 개체가 동일한지 확인할 수 있다.
org.assertj.Assertions
: 반면에 org.assertj.Assertions는 비교적 최신 Java 테스트 프레임워크인 AssertJ 테스트 프레임워크의 일부이다. AssertJ도 어설션 메서드 세트를 제공하지만, 어설션 작성을 위한 보다 유창하고 직관적인 API를 제공하는 것을 목표로 한다. 예를 들어, assertThat(actual).isEqualTo(expected)를 사용하여 두 객체가 동일한지 확인할 수 있다.
그럼 둘중 무엇을 사용해야할까?
org.junit.Assert와 org.assertj.Assertions는 모두 코드 테스트를 위한 어설션 메서드를 제공하지만, AssertJ의 더 전문화된 API가 일부 테스트 시나리오에 더 나은 선택이 될 수 있다. 궁극적으로 두 프레임워크 중 하나를 선택하는 것은 개인의 선호도와 테스트 프로젝트의 특정 요구 사항에 따라 달라진다.
따라서 나는 아직 초보다 보니 org.junit.Assert 와 org.assertj.Assertions 방법 모두 사용했다.
@Test
@DisplayName("사람이 10000명일때 pointsValidate 성공 테스트")
void pointsValidateSuccessTest() {
LadderLine line = new LadderLine(10000);
line.createLine();
//1. org.junit.jupiter.api.Assertions 로 테스트
//람다식을 사용한 형태
org.junit.jupiter.api.Assertions.assertDoesNotThrow(() -> line.pointsValidate());
//람다식을 사용하지 않은 형태
org.junit.jupiter.api.Assertions.assertDoesNotThrow(new Executable() {
@Override
public void execute() throws Throwable {
line.pointsValidate();
}
});
//2. org.assertj.core.api.Assertions 으로 테스트
//람다식을 사용한 형태
org.assertj.core.api.Assertions.assertThatCode(() -> line.pointsValidate()).doesNotThrowAnyException();
//람다식을 사용하지 않은 형태
org.assertj.core.api.Assertions.assertThatCode(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
line.pointsValidate();
}
}).doesNotThrowAnyException();
}
테스트한 method에 대해 설명을 하자면 pointsValidate메서드는 LadderLine객체에 존재하는 ArrayList points에 연속된 true가 저장되어있다면 IllegalArgumentException을 발생시킨다.
위 테스트는 성공 테스트이기때문에 org.junit.Assertions에서는 asseretDoesNotThrow를
org.assertj.Assertions에서는 doesNotThrowsAnyException을 사용했다. (즉 예외가 발생하면 안된다)
Excutable, ThrowableAssert를 사용한 이유
" assertDoesNotThrow(new Executable().. " 여기서 Excutable을 사용한이유는 위 사진처럼 assertDoesNotThrow는 파라미터를 Executable로 받기 때문이다.
"assertThatCode(new ThrowableAssert.ThrowingCallable... " 인 이유도 위와 동일하다. 이때 ThrowableAssert가 붙는이유는 ThrowingCallable 인터페이스를 가지고있는 클래스가 ThrowableAssert이기 때문이다.
'Java > Java 개념' 카테고리의 다른 글
[Java] equals,hashCode (0) | 2023.04.09 |
---|---|
[Java] java.lang 패키지 (0) | 2023.03.12 |
[Java] Error And Exception (0) | 2023.03.12 |
[Java] ArrayList 출력 방법 3가지 (0) | 2023.03.12 |
[Java] Object를 String타입으로 변환 (0) | 2023.03.12 |