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类弃用警告的选项。