[JUnit 4] MockitoJUnitRunner VS SpringRunner

@RunWith

 

프레임워크의 테스트 실행 방법을 확장할 때 사용하는 애노테이션이다.

@RunWith를 사용하면 JUnit에 내장된 BlockJUnit4ClassRunner를 사용하는 대신 이외의 테스트 방식을 제공해주는 MockitoJunitRunner, SpringRunner 등을 사용할 수 있다.

 

ex) @RunWith(classes = MockitoJunitRunner.class)



MockitoJUnitRunner

 

Mockito를 사용하여 mock객체를 주입받아 테스트하기 위해 @Mock, @InjectMocks, @Spy 등을 제공하는 테스팅 Runner이다.

 

 

SpringRunner

 

테스트환경에서 @Autowired를 통해 Bean을 주입받을 수 있는 Spring Application Context를 제공하며

BlockJunit4ClassRunner를 상속받아 확장시킨 Runner이다.

 

SpringRunner에서도 Mockito를 사용할 수 있다. 하지만 제약이 존재한다.

Junit4는 Runner를 두개 이상 등록할 수 없기 때문에 SpringRunner에다가 MockitoJUnitRunner를 추가하는 것이 아닌 다음과 같이 Rule 또는 initMocks를 작성해주면 @Mock, @InjectMocks, @Spy등을 SpringRunner환경에서도 사용할 수 있다.

 

@Rule
public MockitoRule mockito = MockitoJUnit.rule();

//또는

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

 

 

SpringJUnit4ClassRunner

 

SpringRunner는 SpringJUnit4ClassRunner를 상속하고 이름만 간결하게 줄인 별칭이라고 보면된다.

 

public final class SpringRunner extends SpringJUnit4ClassRunner {
    public SpringRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }
}

 

 

 

 

'📦 JUnit' 카테고리의 다른 글

통합 테스트 문제점 및 Mockito를 통한 단위 테스트  (2) 2020.05.17