티스토리 뷰
테스트 파일 설정하기
스프링부트를 사용한다면 기본적으로 설정이 되어있다고 한다.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
스프링부트를 사용하지 않는다면 pom.xml 파일에 위와 같이 추가해주면 된다고 한다. 처음 인텔리제이로 자바 파일을 새로 열었더니 pom.xml 파일이 안 보여서 헤맸다. 어떤건가 했는데 Maven이라는 빌트 툴을 사용할 때, 그 설정파일을 의미하는 것 같다. 처음에 강의랑 달라서 찾아보다가 블로그 글(IntelliJ JUnit 추가하기)을 읽으면서 설정했다. 테스트 파일을 설정하면 초록색 바탕으로 테스트 디렉토리라는 것을 나타내 준다.
기본
@Test : 테스트임을 나타내준다. public 선언해 주지 않아도(void 메소드명) 된다.
@BeforeAll/ @AfterAll : 테스트 시작 전, 후에 실행할 메소드 앞에 붙인다. static이어야 한다.
@BeforeEach/ @AfterEach : 각각의 테스트 코드 전, 후에 실행할 메소드 앞에 붙인다.
@Disabled : 이 테스트는 무시하고 지나간다.
@DisplayNameGeneration : 클래스 앞에도 붙이면 그 클래스 안에 있는 메소드 이름을 모두 변경해 준다. 기본구현체 ReplaceUnderscores 를 제공한다.
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
@DisplayName : 메소드 앞에 붙여서 어떤 테스트인지 이름을 표시할 수 있다. @DisplayNameGeneration 보다 우선순위가 높다.
assertEquals : 예상하는 결과와 메소드 실행결과가 일치하는지 확인해 준다.
assertNotNull : 값이 null이 아닌지 확인한다.
assertTrue : 조건이 참인지 확인한다.
assertAll : 하나의 테스트 메소드에서 중간에 fail이 나면 그 안의 다른 테스트는 실행하지 않는다. executable을 람다식으로 작성하여 assertAll 안에 작성하면, 안에 있는 모든 테스트 코드들을 실행해준다.
assertAll(
() -> assertEquals(calculator.multiply(2, 4), 5), // fail
() -> assertEquals(calculator.sum(2, 4), 6)
// true 같은 메소드 안에 있을 때 위에가 fail이어도 이것도 진행해 줌
);
assertThrows : 예외 발생을 확인한다.
assertTimeout : 특정 시간안에 실행이 완료되는지 확인한다. 해당 시간안에 실행완료가 되지 않더라도 종료되지 않고 끝까지 테스트를 진행한다. @assertTimeoutPreemptively를 사용하면 설정 시간동안 테스트 완료되지 않으면 종료하는데 뭔가 DB랑 관련 있을 때 의도하지 않은 문제가 생길 수도 있다고 한다. 사용에 주의해야 한다.
기타
조건에 따라
@assumTrue, @assumingThat, @Enabled~~,@Disabled~~를 사용할 수 있다.
태그
@Tag로 태그를 설정할 수 있다. @interface를 만들어서 애노테이션을 조합하여 커스텀 태그를 만들 수 있다.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("special") // 여기서부터가 JUnit 애노테이션
@Test
public @interface SpecialTest {
}
인스턴스
테스트 메소드마다 기본적으로 새로운 인스턴스를 생성한다. @BeforeAll과 @AfterAll이 static 이어야 하는 이유이다. 하지만 @TestInstance(Lifecycle.PER_CLASS)를 사용하면 클래스당 하나의 인스턴스로 테스트 코드를 실행한다. 이렇게 되면 @BeforeAll과 @AfterAll이 static일 필요가 없다. @TestInstance는 테스트 코드 간의 의존성이 필요할 때 사용한다. (일반적으로 테스트 코드 간의 의존성이 있다면 좋지 않은 코드이다. 하지만 시나리오 테스트 등으로 테스트 코드 간의 의존성이 필요할 때가 있다.)
순서
일반적으로 순서는 내부 구현에 따라 작동하므로 알 수 없다. 하지만 @TestMethodOrder을 사용하면 순서를 정해줄 수 있다. @TestInstance 사용과 별개로 사용할 수 있으나 테스트 코드 간의 의존성이 없는데 순서를 부여할 의미가 잘 생기지 않는 듯 하다.
반복
@RepeatedTest(value = 횟수, name = 이름)로 테스트 반복이 가능하다. 사용법은 문서를 참고하자. 애노테이션의 붙은 메소드의 인자로 RepetitionInfo를 받을 수 있다.
@ParameterizedTest는 여러가지 값으로 테스트를 반복할 수 있다. 그 값은 @ValueSource, @NullAndEmptySource, @CvsSource 등으로 설정할 수 있다.
참고
인프런에서 백기선님의 자바 테스트코드 강의를 일부를 듣고 기본 내용을 정리한 것이다.
'Back-end > Java' 카테고리의 다른 글
JVM(Java Virtual Machine) (0) | 2021.01.21 |
---|---|
for, switch 몰라도 되지만 알면 신기한 작성 방식 (0) | 2021.01.16 |
- Total
- Today
- Yesterday
- 운영체제
- 마스터즈코스
- 우테코수업
- React
- 학습로그
- 모의면접준비
- 객체지향
- 우아한테크코스
- python
- DB
- javascript
- Spring
- 내부코드
- OS
- JS
- TCP/IP
- 인증
- 알고리즘
- TIL
- Transaction
- 월간회고
- 코드스쿼드
- JPA
- java
- 네트워크
- 개발공부일지
- 글쓰기미션
- CS
- 카카오
- 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |