본문 바로가기
스프링/JUnit

JUnit의 @BeforeAll(@Before)대신 생성자를 사용해도 괜찮지 않을까?

by 책 읽는 개발자_테드 2021. 12. 23.
반응형

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

https://www.whiteship.me/junit-ec-97-90-ec-84-9c-setup--eb-98-90-eb-8a-94-before-eb-a5-bc--ec-82-ac-ec-9a-a9-ed-95-98-eb-8a-94--ec-9d-b4-ec-9c-a0/

반응형

댓글