📦 JUnit
[JUnit 4] MockitoJUnitRunner VS SpringRunner
👾TED
2021. 1. 21. 11:57
@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);
}
}