一、Mockito的使用场景
在写test case的时候, 我们不应该有任何的外部的依赖,比如:
- 需要访问数据库拿数据或者更新数据
- 不应该依赖网络去下载文件
- 发送mail的时候,不应该依赖任何SMTP server
。。。
Mock就是做一个假的object,对这个object里的方法的调用,都会被已经Mock的假对象拦截,然后返回用户预设的行为。这样可以绕过需要从其它地方拿数据的地方,直接返回用户预设的数据,进行单元测试。
最常用的mock框架就是mockito、PowerMock。一般用mockito。
PowerMock:是在EasyMock 以及 Mockito上的扩展,可以实现对静态函数、构造函数、私有函数、Final 函数以及系统函数的模拟
二、Mockito的pom依赖
<!-- https://mvnrepository.com/artifact/junit/junit -->
<!-- 要用junit4 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
三、3中Mock方式
//1. 用@RunWith指定runner, 推荐
@RunWith(MockitoJUnitRunner.class)
public class AccountControllerTestAnnation {
}
//2. 在Before中调用initMocks方法
public class AccountControllerTestAnnation {
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
}
//3.MockitoJUnit.rule()
public class AccountControllerTestAnnation {
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
}