Mockito在Maven junit测试中的应用

这里略去maven工程的配置,以及junit在maven工程中的配置和使用;也不分析Mock的原理和Mockito与其他mock工具的异同。

重点讲解如何在maven junit中引入Mockito,以及使用mock完成单元测试。

1.添加Mockito依赖

在pom.xml中添加dependency:

  1. <dependency>
  2. <groupId>org.mockito</groupId>
  3. <artifactId>mockito-all</artifactId>
  4. <version>1.9.0</version>
  5. <scope>test</scope>
  6. </dependency>

版本可能需要注意下,这里Mockoito使用1.9,junit是4.7

保存后maven会自动从仓库中download:

  1. 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
  2. 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
  3. 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
  4. 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

假设有如下方法需要测试:
  1. public int sumX(int a, int b){
  2. return 0;
  3. }

对应的测试代码大致如下:

  1. private Calculator test;
  2. @Before
  3. public void setUp() throws Exception {
  4. test = new Calculator();
  5. }
  6. @Test
  7. public void testSumX() {
  8. assertEquals(2, test.sumX(1, 1));
  9. }

执行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()); 

上面案例中如下:

  1. import org.mockito.Mockito;
  2. @Test
  3. public void testSumX() {
  4. Calculator mock = Mockito.mock(Calculator.class);
  5. Mockito.when(mock.sumX(1, 1)).thenReturn(2);
  6. assertEquals(2, mock.sumX(1, 1));
  7. }

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

如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。