`
regbin
  • 浏览: 55609 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JMockit使用实例<一>mock一个类的方法、Expectations

阅读更多
  • 关键词:如何mock一个类的方法、Expectations
  • 源类清单
  •  

    /**
     * 演示如何mock一个类的方法
     * @sina weibo:regbin@tom.com
     */
    public class DateUtil {
    
        private int type;
    
        public static final String getCurrentDateStr() {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(DateUtil.now());
        }
    
        public static final String getCurrentDateStrByFormatType(int type) {
            if (type == 1) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                return sdf.format(DateUtil.now());
            } else {
                return DateUtil.getCurrentDateStr();
            }
        }
    
        public static final Date now() {
            return new Date();
        }
    
        public int getType() {
            return type;
        }
        public void setType(int type) {
            this.type = type;
        }
    
    }
    •  单元测试类清单
    /**
     * 演示如何mock一个类的方法
     */
    public class DateUtilTest {
    
        /**
         * Mock某个类方法
         */
        @Test
        public void testGetCurrentDateStr() {
            //DateUtil.class,要Mock的类
            new Expectations(DateUtil.class) {
                {
                  //要Mock的方法now,其他方法DateUtil.class
                    DateUtil.now();
                  //期望方法返回的结果
                    result = mockDate();
                }
            };
            Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
        }
    
        /**
         * Mock 某个类方法根据不同参数返回不同值
         */
        @Test
        public void testGetCurrentDateStrByFormatType() {
            new Expectations(DateUtil.class) {
                {
                    DateUtil.getCurrentDateStrByFormatType(anyInt);
                    result = new Delegate() {
                        public String getCurrentDateStrByFormatType(int type) {
                            if (type == 1) {
                                return "2010/07/22 15:52:55";
                            } else {
                                return "2010-07-22 15:52:55";
                            }
                        }
                    };
                }
            };
            Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStrByFormatType(2));
    
        }
    
        public static Date mockDate() {
            Calendar c = Calendar.getInstance();
            c.set(2010, 6, 22, 15, 52, 55);
            return c.getTime();
        }
    
    }
    •  小结

    Expectations:一个Expectations块是给定测试方法中将会涉及到的mock项中,预期将要被调用的方法或构造函数。一个Expectations可以包含多个预期的要执行方法(mock),但不必包含所有预期会被调用的方法。在Expectations中;除了可以指定预期的方法外,还可以指定方法的参数的精确值或约束行为(满足某个断言);同时Expectations中还可以指定该方法预期的返回值(如果有)或预期抛出的异常。Expectations(.class){}这种方式只会模拟区域中包含的方法,这个类的其它方法将按照正常的业务逻辑运行,上面的例子,定义了一个mock类DateUtil,同时在Expectation中定义了预期会被调用的方法now,以及now方法的返回值,这种方式还有种等价实现方式,使用@Mocked标签

     

    @Test
        public void testGetCurrentDateStr(@Mocked(methods="now")DateUtil dateUtil) {
            //DateUtil.class,要Mock的类
            new Expectations() {
                {
                    //声明要Mock的方法(注:其它方法按照正常的业务逻辑运行)
                    DateUtil.now();
                    //期望方法返回的结果
                      result = mockDate();
                }
            };
            Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
        }

     

    NonStrictExpectations:Expectations块里声明的mock方法,是一定要被执行的,如果没有被执行,会认为整个测试case不通过;NonStrictExpectations就没有这个限制,看例子:

     

    @Test
        public void testGetCurrentDateStr(@Mocked(methods="now")DateUtil dateUtil) {
            //DateUtil.class,要Mock的类
            new NonStrictExpectations() {
                {
                    //声明要Mock的方法(注:其它方法按照正常的业务逻辑运行)
                    DateUtil.now();
                    //期望方法返回的结果
                      result = mockDate();
                    DateUtil.getType();
                    result = 1;
                }
            };
            Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
        }

     

    DateUtil.getType()在后面的断言没用被调用,但也不会出错,但是如果把NonStrictExpectations换成Expectations,就会出错,在Expectations情况必须把

     

    DateUtil.getType();
     result = 1;

     

    给删除掉,上述就是二者的区别

    分享到:
    评论

    相关推荐

      (2.0版本)自己写的struts2+hibernate+spring实例

      直接配置即可.&lt;br&gt;&lt;br&gt;以下是一些相关说明.&lt;br&gt;&lt;br&gt;&lt;br&gt;数据库脚本&lt;br&gt;create table HUBO_USER&lt;br&gt;(&lt;br&gt; ID VARCHAR2(32) not null,&lt;br&gt; NAME VARCHAR2(100),&lt;br&gt; BIRTHDAY DATE,&lt;br&gt; PASSWORD VARCHAR2(100),&lt;br&gt; ...

      JMOCKIT mock 静态方法 单元测试

      可以用来Mock JAVA代码中的静态方法

      servlet.jar 等

      &lt;br&gt;saaj.jar&lt;br&gt;serializer-2.7.0.jar&lt;br&gt;servlet.jar&lt;br&gt;servlet-api.jar&lt;br&gt;slf4j-api-1.3.1.jar&lt;br&gt;slf4j-simple-1.3.1.jar&lt;br&gt;smtp.jar&lt;br&gt;soap.jar&lt;br&gt;spring.jar&lt;br&gt;spring-mock.jar&lt;br&gt;standard.jar&lt;br&gt;...

      JSF与Shale开发用包

      aop.jar&lt;br&gt;spring-beans.jar&lt;br&gt;spring-context.jar&lt;br&gt;spring-core.jar&lt;br&gt;spring-dao.jar&lt;br&gt;spring-hibernate.jar&lt;br&gt;spring-jdbc.jar&lt;br&gt;spring-mock.jar&lt;br&gt;spring-orm.jar&lt;br&gt;spring-remoting.jar&lt;br&gt;spring-...

      thrift-mock:用于模拟节俭服务的轻量级Java测试库

      节俭的模拟 用于模拟节俭服务的轻量级Java单元测试库特征初始化节俭模拟服务器,无需任何预定义节俭IDL,仅需一个端口动态绑定节俭接口对其响应可配置的响应延迟支持将不同的节俭服务中的不同接口绑定到一台服务器...

      基于springboot演示resuful api、mock请求、validate验证、异常捕捉、aop切面编程+源代码+文档说

      &gt;RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、...

      Ajax in action 英文版配书源码.rar

      Dear 'Ajax in Action' Readers,&lt;br&gt;&lt;br&gt;This zip file gathers together the source code for the... Your feedback is welcome.&lt;br&gt;&lt;br&gt;Regards,&lt;br&gt;&lt;br&gt;Dave Crane&lt;br&gt;Gloucestershire UK&lt;br&gt;November 2005 &lt;br&gt;&lt;br&gt;

      dubbo-easy-mock:针对Dubbo接口的Mock解决方案

      这个框架的作用 在自动测试中,针对dubbo接口进行mock的框架 ... &lt;artifactId&gt;dubbo-easy-mock&lt;/artifactId&gt; &lt;version&gt;1.1.0&lt;/version&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.apache.dubbo&lt;/grou

      linux下自己用c语言编写的模拟shell

      1、应用UNIX的fork()等系统调用,编写一个c程序具有以下功能:&lt;br&gt; a) 实现Shell的基本功能,包括有:打印提示符; 接受和分析命令行(滤去无效的空格、tab符号以及换行符等);执行命令(要有出错处理;输入exit...

      JMockit教程.pdf

      正如其名,在单元测试时,CUT(Code Under Test ,被测试代码)可能会依赖其他代码,可以使用JMockit API来mock被依赖的代码,从而进行隔离测试。 JMockit有两套API,mock API用来进行mock测试;mock-up API用来...

      基于springBoot自研微服务框架+源代码+文档说明

      &lt;module&gt;orion-protocol&lt;/module&gt; 网络通信协议包 &lt;module&gt;orion-ribbon&lt;/module&gt; 负载均衡算法 &lt;module&gt;orion-archer&lt;/module&gt; 远程服务调度框架 &lt;module&gt;orion-monitor&lt;/module&gt; 链路监控 &lt;module&gt;orion-...

      Jmock Mock 没有接口的类

      Jmock Mock 没有接口的类 很方便使用

      redis-mock-java:Java中Redis的内存中实现

      地位安装专家&lt; dependency&gt; &lt; groupId&gt;org.rarefiedredis.redis&lt;/ groupId&gt; &lt; artifactId&gt;redis-java&lt;/ artifactId&gt; &lt; version&gt;0.0.5&lt;/ version&gt;&lt;/ dependency&gt;用法去做线程安全RedisMock对象本身是完全线程安全的。...

      jmockit总结

      jmockit资料,关于jmockit的具体使用方式,以及不同方法的详解。

      Angular2学习教程之TemplateRef和ViewContainerRef详解

      TemplateRef 在介绍 TemplateRef 前,我们先来了解一下 HTML 模板元素 – &lt;template&gt; 。模板元素是一种机制,允许包含加载页面时不渲染,但又可以随后通过 ... &lt;span&gt;I am span in mock template&lt;/span&gt; &lt;/s

      middleman-contentful-autobuild:由内容管理系统支持的自动构建中间人站点的测试

      一个简单的解决方案,通过托管的将的简单性与可更新的内容结合在一起 入门 首先,克隆项目并为以下项添加ENV: CONTENTFUL_ACCESS_TOKEN="&lt;contentful&gt;" CONTENTFUL_SPACE="&lt;contentful&gt;" CONTENTFUL_MOCK_ID="...

      quarkus-mockk:Mockk Quarkus扩展

      &lt; groupId&gt;io.quarkiverse.mockk&lt;/ groupId&gt; &lt; artifactId&gt;quarkus-junit5-mockk&lt;/ artifactId&gt; &lt; version&gt;0.2.0&lt;/ version&gt; &lt; scope&gt;test&lt;/ scope&gt; &lt;/ dependency&gt; 如果您使用gradle: dependencies { ...

      mockmail:JavaMail提供程序可模拟电子邮件传输以进行测试

      Mockmail是一个简单的JavaMail提供程序,可让您防止使用实际传输方式发送电子邮件,这在我们测试应用程序时非常有用。 有提供程序可以将消息打印到系统控制台或文件中。 如何安装 如果您将Maven用作依赖项管理器,则...

      httpd-mock:Node.js 的 httpd-mock 运行一个 http 静态服务器。 支持模拟 API 实现

      httpd-mock [-c, --config &lt;path&gt;] [-O, --output] [-p &lt;port&gt;] [-r &lt;rootpath&gt;] 如果您提供的配置文件和命令行参数发生冲突,这些参数将被覆盖。 配置文件 包含以下结构的 JSON 文件: { "serverRootPath" : "./...

      filemock:注释驱动的Java库通过注释将jsonfile转换为对象

      用法包括行家依赖&lt; dependency&gt; &lt; groupId&gt;io.github.kvlabs.filemock&lt;/ groupId&gt; &lt; artifactId&gt;core&lt;/ artifactId&gt; &lt; version&gt;1.0.0&lt;/ version&gt;&lt;/ dependency&gt;&lt; dependency&gt; &lt; groupId&gt;io.github.kvlabs.filemock&...

    Global site tag (gtag.js) - Google Analytics