예외 발생 여부 테스트

목표 어떤 메서드를 호출했을 때 특정 예외가 발생하는지 테스트하는 코드를 작성한다. 어떤 메서드를 호출했을 때 아무 예외가 발생하지 않는지 테스트하는 코드를 작성한다. assertThrows assertThrows<SomeException> { service.insert(something) } Executable(함수형 인터페이스) 타입을 파라미터로 넘기면 이를 실행했을 때 SomeException이 발생하는지 검증한다. assertDoesNotThrow assertDoesNotThrow { service.insert(something) } Executable(함수형 인터페이스) 타입을 파라미터로 넘기면 이를 실행했을 때 아무 예외가 발생하지 않는지 검증한다. 참고 자료 https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/Assertions.html#assertDoesNotThrow(org.junit.jupiter.api.function.Executable) https://stackoverflow.com/questions/17731234/how-to-test-that-no-exception-is-thrown

2024-09-15 · 1 min · 60 words

TestInsatnce

목표 @TestInstance의 용도를 이해한다. Junit의 라이프사이클 Junit에서는 기본적으로 각 테스트 메서드마다 새로 해당 클래스의 인스턴스를 만든다. 따라서, 아래 테스트 코드는 모두 통과한다. class AdditionTest { private int sum = 1; @Test void addingTwoReturnsThree() { sum += 2; assertEquals(3, sum); } @Test void addingThreeReturnsFour() { sum += 3; assertEquals(4, sum); } } 테스트 마다 공유하는 상태가 필요한 경우 아래의 경우 테스트 메서드 사이에 공유가 되어야 하는 상태가 필요할 수 있다. 리소스 초기화 비용이 큰 경우 @Order 어노테이션으로 각 테스트 메서드가 순차적으로 처리되는 경우(단위 테스트에서는 안티 패턴이지만, 통합 테스트에서는 유용할 수 있다....

2024-09-15 · 1 min · 165 words

JUnit 5 Extensions

목표 @ExtendWith 애노테이션의 역할을 알아본다. JUnit 5 Extension JUnit 5에서는 테스트 클래스나 메소드의 동작을 확장하기 위해서 extension을 제공해주고 있다. extension points: 테스트 실행에서 발생할 수 있는 이벤트 지점. 이 지점에서 등록된 extension을 호출할 수 있따. extension point의 5가지 종류: 괄호 안은 구현해야되는 인터페이스 테스트 인스턴스 후처리(TestInstancePostProcessor): 일반적으로 의존성 주입할 때 사용한다. 조건부 테스트 실행( ExecutionCondition): 조건에 따라 테스트 실행 여부를 설정할 수 있다. 라이프사이클 콜백: 테스트 라이프사이클에 행동을 추가할 수 있다....

2024-09-15 · 1 min · 145 words

CsvSource에서 빈 문자열 표현하기

문제 상황 아래와 같은 상황에서 param1에 빈 문자열을 넣고 싶은데, null이 인자로 넘겨져서 에러가 발생했다. @CsvSource(value = [",5"]) @ParameterizedTest fun someTest(param1: String, param2: Int) { // ... } 해결 방법 아래와 같이 작은 따옴표를 이용해서 빈 문자열을 표현할 수 있다. @CsvSource(value = ["'',5"]) @ParameterizedTest fun someTest(param1: String, param2: Int) { // ... } 참고 자료 https://github.com/junit-team/junit5/issues/1014

2024-09-15 · 1 min · 56 words