警告:“不建议使用MockitoJUnitRunner类型”

Warning: “The type MockitoJUnitRunner is deprecated”

1.简介

在本快速教程中,我们将介绍使用流行的测试框架Mockito时可能会看到的警告之一。

即,它是指不推荐使用的MockitoJUnitRunner类。我们将看到为什么发生此警告以及如何处理它。

最后,让我们提醒一下,我们可以使用MockitoJUnitRunner来指示Mockito初始化带有@Mockor @Spy注释的测试双打以及其他Mockito注释。

要了解有关使用Mockito进行测试的更多信息,请在此处查看我们的Mockito系列。

2.为什么显示此警告

如果我们在2.2.20(2016年11月)之前使用的是Mockito版本,则会出现此弃用警告。

让我们简要回顾一下它背后的历史。在早期版本的Mockito中,如果我们想使用Mockito JUnit Runner,则需要导入的包是:

1
import org.mockito.runners.MockitoJUnitRunner;

从版本2.2.20开始,已将与JUnit相关的类重新组合到特定的JUnit包中。我们可以在这里找到软件包:

1
import org.mockito.junit.MockitoJUnitRunner;

因此,不建议使用originalorg.mockito.runners.MockitoJUnitRunner。现在,该类的逻辑属于org.mockito.junit.runners.MockitoJUnitRunner。

虽然删除警告不是强制性的,但建议您这样做。 Mockito 3将删除此类。

3.解决方案

在本节中,我们将说明三种解决此弃用警告的解决方案:

  • 更新以使用正确的导入

  • 使用MockitoAnnotations初始化字段

  • 使用MockitoRule

  • 3.1。更新进口

    让我们从最简单的解决方案开始,即简单地更改包import语句:

    1
    2
    3
    4
    5
    6
    import org.mockito.junit.MockitoJUnitRunner;

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

    就这样!所做的更改应该相当容易。

    3.2。使用MockitoAnnotations初始化字段

    在下一个示例中,我们将使用MockitoAnnotations类以不同的方式初始化模拟:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import org.junit.Before;
    import org.mockito.MockitoAnnotations;

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

        //...
    }

    首先,我们删除对MockitoJUnitRunner的引用。相反,我们调用MockitoAnnotations类的静态initMocks()方法。

    我们在测试类的JUnit @ Beforemethod中进行此操作,这会在每次测试执行之前初始化带有Mockito批注的任何字段。

    3.3。使用MockitoRule

    但是,正如我们已经提到的,MockitoJUnitRunner绝不是强制性的。在最后一个示例中,我们将介绍使用MockitoRule获取@Mock的另一种方式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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)。

    4。结论

    总而言之,在这篇简短的文章中,我们看到了一些有关如何修复MockitoJUnitRunner类弃用警告的选项。