Skills/Spring

Spring - @RunWIth, @ExtendWith

aoaa 2022. 7. 22. 23:54

 1. Junit4 @RunWith

 Junit4에서는 @RunWith(클래스이름.class) 애노테이션으로 Junit Test 클래스를 실행하기 위한 Runner를 명시적으로 지정하여 Test code를 커스터마이징합니다. 여기서 Test Runner는 테스트 클래스 내에 존재하는 각 테스트 메서드 실행을 담당하고 있는 클래스입니다. 이는 테스트 클래스의 구조에 맞게 메서드를 실행하고 결과를 표시하는 역할을 수행합니다.

 원래는 Juni4의 기본 테스트 러너는 BlockjUnit4ClassRunner이지만 대신에 @RunWith로 지정된 클래스를 이용해 클래스 내 테스트 메서드를 수행하도록 지정하여 사용합니다. 

 


 2. Junit5

 그런데 Junit5부터는 @RunWith 애노테이션이 아닌 Extension이라는 방법으로 테스트를 실행하는 방법을 커스터마이징합니다.

@ExtendWith라는 애노테이션을 사용해 @ExtendWith(클래스.class)처럼 Extension 구현체를 지정해줄 수 있습니다.

다만 중요 차이점으로 매타 애노테이션(동작대상 결정)을 지원하고, 여러 번 중복사용 가능하다는 차이점이 있습니다. 

@SpringBootTest
@AutoConfigureMockMvc
class EXTENSION { 
...
}

 위의 코드에는 @RunWith나 @ExtendWith가 없지만, @ExtengWith(SpringExtensino.class)를 갖고 있는 것과 같습니다.

이는 SpringBootTest가 이미 그 코드를 갖고 있기 때문입니다. 

 

실제로 소스코드를 보면 매타 애노테이션이 있는 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

참조