이 빠른 튜토리얼에서는 인기 있는 테스트 프레임워크인 Mockito로 작업할 때 볼 수 있는 경고 중 하나를 살펴보겠습니다.
즉, 더 이상 사용되지 않는 MockitoJUnitRunner 클래스를 참조하는 것입니다. 이 경고가 발생하는 이유와 이를 처리하는 방법을 살펴보겠습니다.
마지막으로 MockitoJUnitRunner를 사용하여 Mockito에게 다른 Mockito 어노테이션과 함께 @Mock 또는 @Spy 어노테이션이 달린 테스트 더블을 초기화하도록 지시할 수 있다는 점을 상기시켜 보겠습니다.
Mockito 테스트에 대해 자세히 알아보려면 여기에서 Mockito 시리즈를 확인하세요.
이 지원 중단 경고는 2.2.20(2016년 11월) 이전의 Mockito 버전을 사용하는 경우 표시됩니다.
그 뒷이야기를 간략하게 살펴보겠습니다. 이전 버전의 Mockito에서는 Mockito JUnit Runner를 사용하려는 경우 가져와야 하는 패키지는 다음과 같습니다.
import org.mockito.runners.MockitoJUnitRunner;
버전 2.2.20부터 JUnit 관련 클래스가 특정 JUnit 패키지로 재그룹화되었습니다. 여기서 패키지를 찾을 수 있습니다:
import org.mockito.junit.MockitoJUnitRunner;
결과적으로 원래 org.mockito.runners.MockitoJUnitRunner는 이제 더 이상 사용되지 않습니다. 클래스의 로직은 이제 org.mockito.junit.runners.MockitoJUnitRunner에 속합니다.
경고를 제거하는 것은 필수는 아니지만 제거하는 것이 좋습니다. Mockito 버전 3에서는 이 클래스를 제거합니다.
이 섹션에서는 이러한 지원 중단 경고를 해결하기 위한 세 가지 솔루션을 설명합니다.
MockitoAnnotations를 사용하여 필드 초기화 MockitoRule 사용간단히 패키지 import 문을 변경하는 가장 간단한 솔루션부터 시작해 보겠습니다.
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
//...
}
그리고 그게 다야! 변경은 상당히 쉬워야 합니다.
MockitoAnnotations다음 예제에서는 MockitoAnnotations 클래스를 사용하여 모의 객체를 다른 방식으로 초기화하겠습니다.
import org.junit.Before;
import org.mockito.MockitoAnnotations;
public class ExampleTest {
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
//...
}
우선, MockitoJUnitRunner에 대한 참조를 제거합니다. 대신 MockitoAnnotations 클래스의 정적 initMocks() 메서드를 호출합니다.
테스트 클래스의 JUnit @Before 메소드에서 이를 수행합니다. 이는 각 테스트가 실행되기 전에 Mockito 어노테이션이 있는 모든 필드를 초기화합니다.
MockitoRule그러나 이미 언급했듯이 MockitoJUnitRunner는 결코 필수가 아닙니다. 이 마지막 예에서는 MockitoRule을 사용하여 @Mock을 작동시킬 수 있는 또 다른 방법을 살펴보겠습니다.
import org.junit.Rule;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
public class ExampleTest {
@Rule
public MockitoRule rule = MockitoJUnit.rule();
//...
}
마지막으로 이 예에서 JUnit 규칙은 @Mock 문이 열리면서 모든 모의 항목을 환영합니다. 따라서 MockitoAnnotations#initMocks(Object) 또는 @RunWith(MockitoJUnitRunner.class)를 수학적으로 사용할 필요가 없음을 의미합니다.