Warning: “The type MockitoJUnitRunner is deprecated”

Dev.Hammy·2024년 4월 1일

Mockito_Tutorial

목록 보기
12/21

1. Introduction

이 빠른 튜토리얼에서는 인기 있는 테스트 프레임워크인 Mockito로 작업할 때 볼 수 있는 경고 중 하나를 살펴보겠습니다.

즉, 더 이상 사용되지 않는 MockitoJUnitRunner 클래스를 참조하는 것입니다. 이 경고가 발생하는 이유와 이를 처리하는 방법을 살펴보겠습니다.

마지막으로 MockitoJUnitRunner를 사용하여 Mockito에게 다른 Mockito 어노테이션과 함께 @Mock 또는 @Spy 어노테이션이 달린 테스트 더블을 초기화하도록 지시할 수 있다는 점을 상기시켜 보겠습니다.

Mockito 테스트에 대해 자세히 알아보려면 여기에서 Mockito 시리즈를 확인하세요.

2. Why Is This Warning Shown

이 지원 중단 경고는 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에서는 이 클래스를 제거합니다.

3. Solutions

이 섹션에서는 이러한 지원 중단 경고를 해결하기 위한 세 가지 솔루션을 설명합니다.

  • 올바른 import를 사용하도록 업데이트 중
  • MockitoAnnotations를 사용하여 필드 초기화
  • MockitoRule 사용

3.1 Updating Imports

간단히 패키지 import 문을 변경하는 가장 간단한 솔루션부터 시작해 보겠습니다.

import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
    //...
}

그리고 그게 다야! 변경은 상당히 쉬워야 합니다.

3.2 Initializing Fields Using 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 어노테이션이 있는 모든 필드를 초기화합니다.

3.3 Using 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)를 수학적으로 사용할 필요가 없음을 의미합니다.

0개의 댓글