⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
JUnit이 테스트를 실행할 때, 메서드를 실행해야 될 터인데, 메서드를 실행하려면, 테스트 클래스를 만들어야 한다.
테스트의 인스턴스의 전략은 테스트 메서드마다 새로운 인스턴스를 생성해서 테스트를 수행하게 되어있다.
그래서 이렇게 위의 사진과 같이
int value = 1;
를 추가해서 곳곳에 value++
를 찍어보면, 어느 한 곳은 증가된 값이 나올 거 같지만, 1이 나온다.
그리고, 인스턴스를 this
로해서
System.out.println(this)
를 찍어보면, 객체값이 다르다. 즉 인스턴스가 메서드마다 새로 인스턴스를 생성하고, 테스트 메서드를 수행하기 때문이다.
일렇게 동작하도록 한 이유는 테스트간의 의존성을 피하기위함이다.
테스트는 순서는 예측할 수 없고, 순서대로 찍히는 것 같지만, (특히 JUnit 5는 더 그럴 것 같지만..) 매번 순서대로 정해진대로 수행한다고 생각하면 안 된다..
여튼..
지금까지는 그랬다.
그런데 JUnit 5부터는 테스트 인스턴스를 클래스당 하나만 만들어서 사용하도록 하는 방법이 추가되었다.
이로써
- 성능적인 면에서 성능이 더 올라갈 것이고,
- 제약이 느슨해지는 장점들이 있다.
@TestInstance
값으로는 TestInstance.Lifecycle.PER_CLASS와 TestInstance.Lifecycle.PER_METHOD를 줄 수 있다.
강의에서는 TestInstance.Lifecycle.PER_CLASS 를 사용.
이렇게 하나의 인스턴스로 묶여서, this로 찍히는 부분을 통해서 인스턴스가 동일한 인스턴스임을 확인할 수 있고, 또한 위에서 증가하지 않던int타입
의value
가 증가했음을 확인할 수 있다.
그리고,@BeforeAll, @AfterAll 애너테이션에 해당하는 메서드를 선언할 때는 늘 static 메서드로 만들어야 했다.
여러 테스트 메서드를 만들 때 똑같은 기능을 하는 메서드를 static 메서드로 선언하여 공유하게 한 것이다.
(당연한 얘기이다..사실은..)
그런데, 인스턴스를 하나만 생성하게 함으로써, static 메서드가 아닌 인스턴스 메서드로 선언해서 사용할 수 있다.
-끝-