1. 简介
在这个快速教程中,我们将探讨在使用流行测试框架Mockito时可能遇到的一个警告。
具体来说,就是关于已弃用的MockitoJUnitRunner
类的警告。我们将了解为什么会显示这个警告以及如何处理它。
最后,请记住,我们可以使用MockitoJUnitRunner
来指示Mockito初始化带有@Mock
或@Spy
注解的测试双(test doubles),以及其他Mockito注解。
要了解更多关于使用Mockito进行测试的内容,可以查看我们的Mockito系列文章。
2. 为何会出现此警告
如果我们在Mockito 2.2.20版本(2016年11月)之前使用,就会出现这个弃用警告。让我们简要回顾一下其背景。在早期版本的Mockito中,如果我们想使用Mockito JUnit运行器,需要导入的包是:
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
类初始化我们的mocks:
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规则会初始化任何带有@Mock
注解的mock。
这意味着不再需要显式使用MockitoAnnotations#initMocks(Object)
或@RunWith(MockitoJUnitRunner.class)
。
4. 总结
总之,在这篇短文中,我们了解了多种解决MockitoJUnitRunner
类弃用警告的方法。