10. JUnit 5 테스트 인스턴스

김성수·2022년 12월 25일
0

⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.


JUnit이 테스트를 실행할 때, 메서드를 실행해야 될 터인데, 메서드를 실행하려면, 테스트 클래스를 만들어야 한다.

테스트의 인스턴스의 전략은 테스트 메서드마다 새로운 인스턴스를 생성해서 테스트를 수행하게 되어있다.

그래서 이렇게 위의 사진과 같이

int value = 1;

를 추가해서 곳곳에 value++를 찍어보면, 어느 한 곳은 증가된 값이 나올 거 같지만, 1이 나온다.
그리고, 인스턴스를 this로해서

System.out.println(this)

를 찍어보면, 객체값이 다르다. 즉 인스턴스가 메서드마다 새로 인스턴스를 생성하고, 테스트 메서드를 수행하기 때문이다.

일렇게 동작하도록 한 이유는 테스트간의 의존성을 피하기위함이다.

테스트는 순서는 예측할 수 없고, 순서대로 찍히는 것 같지만, (특히 JUnit 5는 더 그럴 것 같지만..) 매번 순서대로 정해진대로 수행한다고 생각하면 안 된다..

여튼..


지금까지는 그랬다.


그런데 JUnit 5부터는 테스트 인스턴스를 클래스당 하나만 만들어서 사용하도록 하는 방법이 추가되었다.
이로써

  • 성능적인 면에서 성능이 더 올라갈 것이고,
  • 제약이 느슨해지는 장점들이 있다.

@TestInstance

값으로는 TestInstance.Lifecycle.PER_CLASSTestInstance.Lifecycle.PER_METHOD를 줄 수 있다.

강의에서는 TestInstance.Lifecycle.PER_CLASS 를 사용.


이렇게 하나의 인스턴스로 묶여서, this로 찍히는 부분을 통해서 인스턴스가 동일한 인스턴스임을 확인할 수 있고, 또한 위에서 증가하지 않던 int타입value가 증가했음을 확인할 수 있다.
그리고,

@BeforeAll, @AfterAll 애너테이션에 해당하는 메서드를 선언할 때는 늘 static 메서드로 만들어야 했다.

여러 테스트 메서드를 만들 때 똑같은 기능을 하는 메서드static 메서드로 선언하여 공유하게 한 것이다.
(당연한 얘기이다..사실은..)
그런데, 인스턴스를 하나만 생성하게 함으로써, static 메서드가 아닌 인스턴스 메서드로 선언해서 사용할 수 있다.


-끝-

profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

0개의 댓글