@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 |
---|