[Junit5] 각 테스트 메서드마다 새로운 클래스 인스턴스를 생성한다.

bien·2023년 3월 25일
0

테스트

목록 보기
1/1

stack을 직접 클래스로 구현해서 사용하는 프로젝트를 하고 있다. stack 클래스 인스턴스마다 하나의 DB를 의미하니, 테스트 시행마다 @BefroeEach를 통해 인스턴스를 주입해 DI를 시행하려고 했다. 그런데 그냥 클래스 객체를 공유해도 테스트 fail이 안 떴다.(그것 때문에 내가 테스트 코드를 잘 못 작성한줄 알고 한참을 수정했다.) 아무리 생각해도 말이 안돼서, 각 테스트마다 사용되는 stack객체의 주소를 찍어 봤다.

아니나 다를까 테스트마다 찍히는 stack 주소가 다 달랐다. 약간 멘붕이었다. 왜 다르지? 내가 어디서 부터 뭘 잘못했길래 이런 결과가..? 그러다 아주 우수한 Junit이 자체적으로 메서드마다 클래스 객체를 새로 써준것은 아닐까.. 하는 생각이 들었다.

그게 맞았다.

  • JUnit5는 각 테스트 메서드마다 새로운 클래스의 인스턴스를 생성한다.
  • default 값이 그렇고, 클래스에 @TestInstance 애노테이션을 추가해서 클래스 인스턴스를 공유하도록 할 수도 있다.
  • 메서드마다 새 인스턴스를 생성 TestInstance.Lifecycle.PER_METHOD
  • 클래스마다 새 인스턴스를 생성 TestInstance.Lifecycle.PER_CLASS

이제야 예상한 대로 test가 fail되고 같은 객체를 사용한다.


출처)
https://velog.io/@znftm97/JUnit5-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B03

profile
Good Luck!

0개의 댓글