警告:不推荐使用MockitoJUnitRunner类型

2023/05/12

1. 简介

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

即,指的是已弃用的MockitoJUnitRunner类。我们将了解为什么会出现此警告以及如何处理它。

最后,让我们提醒一下,我们可以使用MockitoJUnitRunner来指示Mockito初始化我们用@Mock或@Spy标注的测试替身,以及其他Mockito注解。

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

2. 为什么显示这个警告

如果我们使用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. 解决方案

在本节中,我们将解释三种不同的解决方案来解决此弃用警告:

  • 更新以使用正确的导入
  • 使用MockitoAnnotations初始化字段
  • 使用MockitoRule

3.1 更新导入

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

import org.mockito.junit.MockitoJUnitRunner;

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

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

3.2 使用MockitoAnnotations初始化字段

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

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 使用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 Rule初始化任何用@Mock标注的mock。

因此,这意味着MockitoAnnotations#initMocks(Object)或@RunWith(MockitoJUnitRunner.class)的显式使用不是必需的。

4. 总结

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

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章