프레임워크/스프링&스프링부트

Spring&SpringBoot::JUnit5... Runwith 변경사항

JUnit5... Runwith 변경사항

최근 여러강의를 듣거나 책을 읽다보면 대부분의 강의나 책에서 다루는 테스트에서는 Runwith 어노테이션을 사용하고 있음을 알 수 있다. 그러한 강의를 따라하다보면 제대로 테스트 코드가 작동하지 않음을 알 수있는데 Runwith어노테이션을 사용할 수 없기 때문에 발생하는 경우들이 있을 것이다.

그 이유는 아마 새롭게 프로젝트를 만들고 진행하다가 JUnit5를 설치하거나 의도적으로 JUnit5를 사용하려고 했기 때문일 것이다.

 

그렇다면 Runwith는 무엇이고 왜사용했으며 어떠한 어노테이션으로 대체되고 JUnit5에서는 왜 사용하지 않게 된 것인지에 대해서 알아 보도록 하겠다.

Runwith란?

Runwith어노테이션은 스프링 프로젝트의 테스트 실행 방법을 확장하고자 할때 사용되는 어노테이션으로 ApplicationContext를 만들고 관리하는 작업을 @RunWith에 설정된 class를 이용하겠다는 뜻이다.

JUnit5에서 @Runwith를 사용할 수 없는 이유?

우선 Junit5는 크게 3개의 서브프로젝트로 구성된 복수의 모듈로 구성. 그리고 각각 프로젝트 또한 용도에 따라 여러개의 서브 모듈로 구성되어있음.

  1. JUnit Platform : JUnit테스트를 실행하기 위한 기반이 되는 모듈. TestEngine을 구현한 모듈을 찾아서 실행
  2. JUnit Jupiter : 테스트를 기술하기 위한 프로그램. 확장모델들이 담겨있는 모듈(TestEngine API 구현체)
  3. JUnit Vintage : JUnit의 4, 3버전을 실행하기위한 TestEngine을 제공하는 모듈

 

@Runwith → @ExtendWith

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}

SpringExtension은 Spring5부터 제공되며 Spring TestContext 프레임워크를 JUnit5에 통합하였고, @Extentsion인터페이스를 구현하는 모든 클래스를 허용하게 됩니다.