`
hsyzijvaa
  • 浏览: 111887 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
   
  • 关键词:如何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;
     
    给删除掉,上述就是二者的区别
     
    0
    1
    分享到:
    评论

    相关推荐

      JMOCKIT mock 静态方法 单元测试

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

      jmockit总结

      即使方法只有一个简单的逻辑,也有编写测试的必要。测试应该覆盖各种边界条件和正常情况,确保代码在不同输入下的表现。 4. **Mock的原因**: - 依赖单元可能已经有自己的单元测试。 - 某些依赖在测试环境中不易...

      Java实例化一个抽象类对象的方法教程

      由于抽象类自身不能被实例化,这意味着你不能使用`new`关键字直接创建一个抽象类的对象。然而,尽管不能直接实例化,抽象类在特定情况下依然可以间接地创建对象。以下将详细介绍如何在Java中处理抽象类实例化的问题...

      mock.js实现模拟生成假数据功能示例

      本文实例讲述了mock.js实现模拟生成假数据功能。分享给大家供大家参考,具体如下: mock使用方法很简单, 下面是简单的用法, 详细的用法可以看官方文档, 写的很清楚, 下面的代码直接拷贝到本地html文件, 双击打开即可...

      JMockit学习分享

      在此示例中,我们首先使用`@Mocked`注解创建了一个`UserRepository`的mock对象,并使用`@Tested`注解指定了被测试的`UserService`类。接下来,我们定义了一个`Expectations`块来记录预期行为,然后调用`userService....

      JMockit基础教程

      JMockit的一个显著优点是其简洁的API,它避免了传统Mock框架中常见的复杂性。例如,它使用注解而不是单独的方法来创建模拟对象,并且自动处理Record- Replay- Verify的切换,使测试代码更加清晰。 总之,JMockit是...

      jmockit中文教程

      JMockit的核心能力在于其能够模拟(Mock)和伪装(Stub)Java类中的方法,从而使得开发者能够在隔离环境中测试代码,无需依赖于实际的系统组件。 #### 开发人员测试和测试独立 软件开发过程中,编写高质量的测试...

      单元测试与 Mock 方法

      1. 创建Mock对象:使用EasyMock.createMock()方法创建一个Mock对象。 2. 配置Mock对象:通过EasyMock.expect()设置Mock对象的方法调用期望,包括参数和返回值。 3. 激活Mock对象:使用EasyMock.replay()将Mock对象从...

      C++ mock框架mockcpp

      例如,如果你正在测试一个类,该类依赖于一个数据库连接对象,但你并不想在测试中实际连接到数据库,你可以创建一个mock数据库连接对象,让它在特定情况下返回预设的查询结果。这样,你就可以专注于测试你的类如何...

      jmockit-1.2

      2. **创建测试类**:创建一个JUnit测试类,然后使用`@Test`注解标记测试方法。在测试方法内部,使用`@Mocked`或`@Injectable`注解声明mock对象。 3. **定义模拟行为**:使用`new Expectations()`块来定义模拟行为,...

      JMockit教程.pdf

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

      使用PowerMock来Mock静态函数

      PowerMock是一个强大的扩展工具,它可以与Mockito、EasyMock等主流Mock框架结合,允许我们模拟静态方法、构造器、final类和方法、删除静态初始化器等。 标题“使用PowerMock来Mock静态函数”指的是如何利用...

      Go-Mockcounterfeiter-一个工具用于在Go中生成自容器类型安全的测试Mock对象

      这样,当我们测试一个需要依赖其他服务或组件的函数时,可以使用Mock对象替代真实的依赖,以便在隔离的环境中验证被测试代码的行为。 使用Mock counterfeiter,开发者无需手动编写Mock对象的大量样板代码,这极大地...

      Mock是一个零侵入的服务端Mock平台,底层基于JVM Sandbox。相比于Fiddler、-mock-fe.zip

      Mock是一个强大的服务端模拟工具,它的核心特性是零侵入性,这意味着在你的实际项目代码中无需进行任何修改,即可实现服务的模拟。这极大地提高了开发效率,特别是在进行集成测试或者依赖于其他服务但又无法实时访问...

      本地搭建一个mock服务器方便调试开发

      为了解决这个问题,"本地搭建一个mock服务器方便调试开发" 成为了一个有效的策略。Mock服务器允许前端开发者在后端接口尚未完成时,模拟返回预期的数据,从而快速进行功能验证和界面开发,极大地提高了开发效率。 ...

      Jmockit用法示例

      静态方法的模拟是单元测试中的一个挑战,因为它们是类级别的,而不是对象级别的。Jmockit通过`@Mocked`或`@NonStrict`注解可以轻松处理: ```java @Test public void testWithMockedStaticMethod(@Mocked Static...

      2019年CFA一级mock打包.zip

      在准备CFA一级考试的过程中,考生需要深入理解每一个科目的概念,尤其是定量方法中的统计和概率,财务报表分析中的会计原则,以及投资组合管理中的资产配置策略等。同时,考生还需要掌握如何在有限的时间内完成大量...

      基于python的mock测试数据练习

      Python 提供了一个强大的库——`unittest.mock`,用于模拟(mock)对象、方法和类,以便在测试中隔离依赖关系,专注于测试目标代码的功能。本练习主要关注如何使用 `unittest.mock` 进行mock测试数据。 一、Mock...

      jmockit框架所使用jar包

      jmockit框架所使用jar包,在写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建,我们应对的方法是Mock。简单的说就是模拟这些需要构建的类...

    Global site tag (gtag.js) - Google Analytics