这里略去maven工程的配置,以及junit在maven工程中的配置和使用;也不分析Mock的原理和Mockito与其他mock工具的异同。
重点讲解如何在maven junit中引入Mockito,以及使用mock完成单元测试。
1.添加Mockito依赖
在pom.xml中添加dependency:
-
<dependency>
-
<groupId>org.mockito</groupId>
-
<artifactId>mockito-all</artifactId>
-
<version>1.9.0</version>
-
<scope>test</scope>
-
</dependency>
版本可能需要注意下,这里Mockoito使用1.9,junit是4.7
保存后maven会自动从仓库中download:
-
17-12-21 下午02时52分06秒: Downloading http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.pom
-
17-12-21 下午02时52分06秒: Downloaded http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.pom
-
17-12-21 下午02时52分07秒: Downloading http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.jar
-
17-12-21 下午02时52分09秒: Downloaded http://repo1.maven.org/maven2/org/mockito/mockito-all/1.9.0/mockito-all-1.9.0.jar
后面在代码中引入Mockito即可。
2.单元测试中使用Mockito
假设有如下方法需要测试:
-
public int sumX(int a, int b){
-
return 0;
-
}
对应的测试代码大致如下:
-
private Calculator test;
-
-
-
public void setUp() throws Exception {
-
test = new Calculator();
-
}
-
-
-
public void testSumX() {
-
assertEquals(2, test.sumX(1, 1));
-
}
执行junit test,如无意外结果肯定是fail:
下面使用mock,使该单元测试通过:
首先引入Mockito
import org.mockito.Mockito;
使用Mockito
大致类似:
Type mock = Mockito.mock(Type.class);
然后设定返回值或者抛出异常:
when(mock.func(args).thenReturn(XXX);
when(mock.func(args).thenThrow(new RuntimeException());
上面案例中如下:
-
import org.mockito.Mockito;
-
-
-
public void testSumX() {
-
Calculator mock = Mockito.mock(Calculator.class);
-
Mockito.when(mock.sumX(1, 1)).thenReturn(2);
-
assertEquals(2, mock.sumX(1, 1));
-
}
mock sumX方法使其当输入为(1, 1)时返回2,然后再跟之前junit测试一样调用断言进行判断;重新执行junit test发现pass了
3.小结
当然实际测试中,mock不是这么用的,不是用来将错误的返回改成期望返回值,而是使用mock工具模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试目标与测试边界以外的对象隔离开。
本文旨在介绍如何在maven junit工程中引入和使用Mockito,所以仅以此为例。
作者:ronniewy
来源:https://blog.csdn.net/devil_wangyu/article/details/78864640?utm_source=blogkpcl5
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。