반응형
JUnit은 애너테이션을 통해서 메서드의 역할을 정할 수 있다. 이때, 애너테이션이 붙은 메서드는 실행 순서가 정해진다.
JUnit5를 기준으로 @BeforeAll -> @BeforeEach -> @Test -> @AfterEach -> @AfterAll 순서로 메서드가 실행된다.
이때, 문득 떠오른 생각이 있었다. @BeforeAll이 모든 테스트 메서드 실행 전 수행되고 주어진 테스트에 대해 한 번만 실행된다면, 그냥 생성자를 사용하면 되는게 아닐까?
class 블라블라Test {
@BeforeAll
static void setUp() {
}
}
vs
class 블라블라Test {
블라블라Test() {
}
}
어떤 것을 사용하는게 맞을까?
결론적으로 생성자 대신 @BeforeAll을 사용하는 것이 몇 가지 유리한 점이 있었다.
1. 직관적으로 @BeforeAll 메서드와 @AfterAll 메서드의 실행은 테스트 실행 전 후로 대칭적이다. 생성자 대신 @BeforAll을 사용하는 것이 개발자가 코드를 분석할 때 더 적은 노력으로 이해할 수 있다.
2. @BeforeAll에서 예외가 발생하면 JUnit이 유용한 스택 트레이스 정보를 돌려준다. 하지만 생성자에서 예외가 발생하면 JUnit을 활용한 유용한 정보를 얻을 수 없다.
추가적인 차이점:
- 생성자는 하위 클래스 생성자와 @Rule 메서드 실행 전에 실행 된다. @BeforeAll 메서드는 이러한 모든 것이 실행된 후 실행 된다.
출처
https://stackoverflow.com/questions/6094081/junit-using-constructor-instead-of-before
반응형
'스프링 > JUnit' 카테고리의 다른 글
JUnit 테스트에서 ApplicationRunner 실행하지 않도록 설정하기 (0) | 2022.01.09 |
---|---|
Mockito란? Mockito 사용하기 (3) | 2021.11.15 |
[Junit] AssertJ란? (0) | 2021.10.30 |
[JUnit] 오류 해결: java.lang.IllegalStateException: Failed to load ApplicationContext (0) | 2021.08.10 |
[Junit] MockMvc 객체란? (0) | 2021.04.29 |
댓글