junit mock 方法(need的用法总结)

使用EasyMock的总体步骤1、生成Mock接口IServicemockService=EasyMock.createMock(“name”,IService.class);如果要mock对象,而不是接口,应该使用classextension:org.easymock.classextension.EasyMock如果要mock多个接口,最好使用Mo

大家好,又见面了,我是你们的朋友全栈君。

使用EasyMock的总体步骤

1、生成Mock接口

IService mockService = EasyMock.createMock("name", IService.class);

如果要mock对象,而不是接口,应该使用class extension:org.easymock.classextension.EasyMock

如果要mock多个接口,最好使用MockControl来管理:

    IMocksControl control = EasyMock.createControl();  
    IService1 mockObj1 = control.createMock(IService1.class);  
    IService2 mockObj2 = control.createMock(Iservice2.class);  

2、设置预期行为

如果返回值是void:

mockService.doVoidMethod();
EasyMock.expectLastCall();// 最新版本的EasyMock可以忽略此句


如果要求抛出异常:

EasyMock.expectLastCall().andThrow(
                new MyException(new RuntimeException())).anyTimes();


如果返回值不是void:

EasyMock.expect(mockService.doSomething(isA(Long.class), isA(Report.class), 
		isNull(Report.class))).andReturn("return string").anyTimes();

上例方法中传入3个参数,分别是Long、Report、null——注意,如果参数是基本类型long,则使用EasyMock.anyLong()

传入参数还可以定义为具体的对象,而不是类。

3、将Mock对象切换到replay状态

EasyMock.replay(mockService);

如果是用MockControl来管理:

control.replay();  

4、测试

bo.setService(mockService);
bo.doSomething();

5、验证Mock对象的行为

EasyMock.verify(mockService); 

如果是用MockControl来管理:

control.verify();

expect()注意事项

期望传入参数为基本类型时

用expect来设置mock方法的期望调用方式时,如果使用到基本类型,但是又不要基本类型的值,

不能用:EasyMock.isA(Long.class)

要用:EasyMock.anyLong()

期望传入参数可能为null时

如果传入的参数可能为null,如果用

isA(String.class)

而实际传入的是null,则会报错 (isA(java.lang.String), <any>): expected: 1, actual: 0

应该用:

or(isA(String.class), isNull())

如果返回结果在运行时才能确定

很可能某个方法期望的返回结果不是固定的,例如根据传入参数不同而不同;这时需要使用andAnswer():

EasyMock.expect(mockService.execute(EasyMock.anyInt())).andAnswer(new IAnswer<Integer>() {
            public Integer answer() throws Throwable {
                Integer count = (Integer) EasyMock.getCurrentArguments()[0];
                return count * 2;
            }
        });


注意,通过EasyMock.getCurrentArguments()可以获取传入参数!

times()

常见问题

java.lang.IllegalStateException: 2 matchers expected, 1 recorded.

可能是设置mock方法的期望调用方式时,既使用了isA的方式来指定参数,又使用了一个具体值来作为参数

比如这样写:

    expect(mockEmployeeRepository.findByDepartmentAndSpecification("HR",   
           isA(EmployeeSearchSpecification.class)).andReturn(emplooyees);  

正确的写法:
——用eq(具体值)

    expect(mockEmployeeRepository.findByDepartmentAndSpecification(eq("HR"),  
           isA(EmployeeSearchSpecification.class)).andReturn(employees);  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java编译原理

    java编译原理4.Java编译原理1.javac是什么?(1)javac是一种编译器,能够将一种语言规范转换成另一种用语言规范,通常编译器是将便于人们理解的语言规范成机器容易理解的语言规范。(2)javac的任务就是将java源代码语言转换成jvm能够识别的语言,然后jvm将jvm语言再转化成当前机器能够识别的语言(这样使得对开发者屏蔽与机器相关的细节,并且使得语言的执行与平台无关)2.javac编译器的基本结…

    2022年5月9日
    34
  • java随机生成六位密码_java怎样实现密码的输入

    java随机生成六位密码_java怎样实现密码的输入importjava.util.Random;publicclasstest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(genRandomNum(10));}/***生成随即密码*@parampwd_len…

    2025年7月12日
    0
  • 光流法简单介绍「建议收藏」

    光流法简单介绍「建议收藏」光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:(1)基于区域或者基于特征的匹配方法;

    2022年7月23日
    6
  • smtp服务器组件,本机搭建虚拟SMTP服务器教程[通俗易懂]

    smtp服务器组件,本机搭建虚拟SMTP服务器教程[通俗易懂]该楼层疑似违规已被系统折叠隐藏此楼查看此楼Windows2000用户安装设置服务端WindowsXP和2000本身就拥有构件SMTP服务器的功能,只是一般还没有安装。选择“控制面板→添加/删除程序→添加/删除Windows组件”,弹出“Windows组件向导”对话框,在其中双击“Internet信息服务(IIS)”项,就会打开详细选择项,选中“SMTPService”,按“确定”,插入…

    2022年10月3日
    1
  • SpringBoot中的@ApiModelProperty注解

    @ApiModelProperty()注解用于方法、字段,表示对model属性的说明或者数据操作更改,以下是它的源码://IntelliJAPIDecompilerstubsourcegeneratedfromaclassfile//Implementationofmethodsisnotavailablepackageio.s…

    2022年4月14日
    174
  • oracle客户端配置监听_oracle11g客户端配置

    oracle客户端配置监听_oracle11g客户端配置1、环境介绍操作系统:windows10专业版oracle版本:19coracle客户端版本:19.3oracle客户端下载地址:https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html2、运行软件包中setup.exe进行安装3、使用sqlplus连接数据库sqlplus用户名/密码@服务器/服务名sqlplusdebezium/Smtgbk_123@10.99.99.20

    2025年7月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号