• 单元测试mock之mockito使用


    先来一个简单的例子来感受一下

    外部接口类:TestService.java

     1 package com.yzl.mock;
     2 
     3 /**
     4  * 测试用服务
     5  *
     6  * @author yangzhilong
     7  */
     8 public interface TestService {
     9     /**
    10      * 
    11      * 简单的测试服务,实现两个数相加
    12      *
    13      * @param a
    14      * @param b
    15      * @return
    16      */
    17     public int add(int a, int b);
    18 }

    正常流程的JUnit单元测试方法类似如下:

     1 @Test
     2 public void test0(){
     3     //从spring容器里取到该接口的实现类
     4     TestService service = new ClassPathXmlApplicationContext("xxx.xml").getBean(TestService.class);
     5     int a=2, b=3;
     6     int result = service.add(a, b);
     7     Assert.assertSame("计算结果预期", 5, result);
     8     
     9     //拿到这个result然后调用其他的业务逻辑
    10 }

    但是目前该接口的实现类(服务)目前是调用不通的,或者是压根还没做,但是你又不想因为这个接口而影响自己的代码的测试,就可以使用Mockito来模拟接口的调用。

    首先引入mockito的jar

    1 <dependency>
    2     <groupId>org.mockito</groupId>
    3     <artifactId>mockito-core</artifactId>
    4     <version>2.1.0-RC.1</version>
    5     <scope>test</scope>
    6 </dependency>

    然后编写代码如下:

     1 package com.yzl.mock;
     2 
     3 import org.junit.Assert;
     4 import org.junit.Test;
     5 import org.mockito.Mockito;
     6 
     7 public class MockTest {
     8     /*
     9      * 使用mockito来模拟测试
    10      */
    11     @Test
    12     public void test1(){
    13         TestService service = Mockito.mock(TestService.class);
    14         int a=2, b=3;
    15         //使用mockito模拟接口返回
    16         Mockito.when(service.add(a, b)).thenReturn(5);
    17         int result = service.add(a, b);
    18         System.out.println(a + "+" + b + "=" + result);
    19         Assert.assertSame("计算结果预期", 5, service.add(a, b));
    20         //使用result继续做后面的业务
    21     }
    22 }

    上面的代码中Mockito的静态方法可以通过静态Import的形式导入,然后使用里面的静态方法就可以不带类名了,例如:

    //非静态import的写法
    import org.mockito.Mockito;
    Mockito.when(service.add(a, b)).thenReturn(5);
    
    //静态import的写法
    import static org.mockito.Mockito.*;
    when(service.add(a, b)).thenReturn(5);

    运行junit单元测试方法将输出:

    2+3=5
  • 相关阅读:
    Loadrunner:场景运行较长时间后报错:Message id [-17999] was not saved
    JMeter学习(三十二)属性和变量
    LoadRunner参数化MySQL
    Linux下安装使用NMON监控、分析系统性能
    使用Loadrunner进行http接口压力测试
    Windows远程桌面连接Ubuntu 14.04
    oracle转Mysql中,varchar2(10)和number应该转换为什么类型?
    centos下pip安装mysql_python
    JMeter中返回Json数据的处理方法
    如何使用AutoIT完成单机测试
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/6044981.html
Copyright © 2020-2023  润新知