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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MATLAB函数调用

    MATLAB函数调用数学建模matlab自定义函数时间2020年5月10日学习Matlab自定义函数使用,并结合所学函数简单修改了一下上周的代码实现了Topsis法。1.Matlab语句构成的程序文件称为M文件,以m作为文件的扩展名,分为函数文件和程序文件。程序文件即脚本文件,无function;函数文件有function,且在第一行或者第一个不是注释的行2.两个文件运行函数:函数定义文件和函数调用文件(函数可在脚本文件或命令窗口直接调用),两文件必须放在同一目录下,函数文件名必须与函数名相…

    2022年7月17日
  • 英文翻译插件介绍_好用的翻译插件

    英文翻译插件介绍_好用的翻译插件明确需求开发一款插件最先要考虑的当然是它要实现什么功能了。比如我想做的是varname-go-die主要功能就是让开发者有时候遇到起变量名但是不知道英文怎么拼时,不需要切换到翻译软件去查找再copy

    2022年8月1日
  • 【Stimulsoft Reports.WPF教程】保存并加载Designer的事件

    【下载StimulsoftReports.WPF最新版本】此示例显示如何在代码中使用“Save”和“Load”事件。您可以在应用程序初始化时将事件侦听器添加到StiOptions.Engine.GlobalEvents:publicWindow1(){StiOptions.Wpf.CurrentTheme=StiOptions.Wpf.Themes.Office20…

    2022年4月9日
  • kafka的主要作用_通俗的讲kafka是干什么的

    kafka的主要作用_通俗的讲kafka是干什么的作者:宝哥-NO1blog.csdn.net/code52/article/details/504755111、kafka是什么?Kafka是由LinkedIn开发的一个分布式基于发布/订…

    2022年10月13日
  • 如何使用串口调试助手(调试串口)

    如何使用串口调试助手(调试串口)转载自:https://jingyan.baidu.com/article/54b6b9c0b3c8c02d583b4707.html如何使用串口调试助手(调试串口)很多时候,调试硬件需要用串口输出一些调试信息,用电脑USB口接收十分方便,串口调试软件很多,用习惯了还是觉得串口调试助手最为方便,这个也是因人而异吧,接下来带大家了解一下串口调试助手如何使用。工具/原料 windows电脑一台 USB接口线一根(用于连接硬件和电脑USB接口) 方法/步骤 1 下载.

    2022年6月9日
  • cad注释比例和打印比例不一样_cad注释比例(cad注释比例与打印比例)

    cad注释比例和打印比例不一样_cad注释比例(cad注释比例与打印比例)这两个比例有什么区别分别代表的是什么意思麻烦说详细点谢谢是物体被缩小了50倍后的图形这两个比例。但是一张图纸不允许出现两个或以上的比例(局部放大除外),但是标注的数字是实际尺寸,两个没有区别画的是800*500mm的线,注释比例用的1:1,这样是不是不行?我的标注字体.注释比例就是按图框大小来标注的,比如将1:1的图框放大到1:5,那么就选择1:5大小的注释比例,当然注释比例是你事先设置好的…

    2022年5月14日

发表回复

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

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