EasyMock问题总结
最近开发中同事遇到过很多EasyMock的问题,也许有时候会怀疑easyMock是不是出了问题,其实99.99%的情况都是我们自己的代码出了问题,所以请认真的检查出错前后代码。
1.
java.lang.IllegalStateException: missing behavior definition for the preceding method call getBidwordSequence()
出现这样的错误请仔细检查getBidwordSequence()是void方法,还是有返回值,返回值的类型是不是写对了。
2.
java.lang.IllegalStateException: 0 matchers expected, 1 recorded.
This exception usually occurs when matchers are mixed with raw values when recording a method:
foo(5, eq(6)); // wrong
You need to use no matcher at all or a matcher for every single param:
foo(eq(5), eq(6)); // right
foo(5, 6); // also right
这个错误是要检查出错方法的前面方法是否多添加了匹配器(anyObject),尤其注意andReturn();easymock在andReturn()这个方法中入参不能是anyObject的。必须要给出方法的入参。
//错误写法
EasyMock.expect(subwayService.auditActivityRejected(EasyMock.anyObject(List.class)))
.andReturn(anyObject(List.class)
);
//正确写法
EasyMock.expect(subwayService.auditActivityRejected(EasyMock.anyObject(List.class)))
.andReturn(null
);
3.
1.EasyMock.expect(subwayService.auditActivityRejected
(EasyMock.anyObject(List.class))).andReturn(1);
2.EasyMock.expect(subwayService.auditActivityVerified
(EasyMock.anyObject(List.class))).andReturn(1);
如果你原本希望录制脚本1,结果由于copy代码录制成了脚本2,这样你期待方法返回结果0,结果方法始终返回默认的0,而且由于你可能对于返回结果是0的抛出了自定义的异常,可怕的后果是verify就验证不了该方法,直接会显示你抛出的异常,如果不细心,这个错误还是很隐蔽的。所以录制的脚本一定要和调用的方法一致。
4.
notifyFacade.addADGroup( isA(List.class));
//如果adgroup是空的,
java.lang.AssertionError:
Unexpected method call addADGroup(null):
addADGroup(isA(java.util.List)): expected: 1, actual: 0
org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
isA和anyObject的区别
:如果出现了上述的错误,请看下你的方法传递参数的时候使用的isA(List.class),还是anyObject(List.class)的方法,这两个方法区别在于isA会调用instance of 方法,判断except时候的入参类型和实际是否相同,null instance of List 返回false,导致验证的失败,而使用anyObject则不会出现类似的问题。所以正确的写法如下
notifyFacade.addADGroup( anyObject(List.class))
除了上述问题,还有谁碰上比较难受的异常的时候可以提交给我,总结到这个文档里面, 以后还有同事碰上类似问题可以先在这里找找解决方法。
分享到:
相关推荐
EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库,旨在解决单元测试中的 Mock 对象构建问题。以下是 EasyMock 的详细介绍: 单元测试与 Mock 方法 单元测试是对应用中的某一个模块的功能...
总结来说,EasyMock 2.4是Java开发中的一个重要工具,它通过模拟对象简化了单元测试,使得测试更加可控和可读。通过阅读《EasyMock使用简明手册》和解压后的easymock2.4.zip文件,开发者可以深入理解并掌握如何有效...
总结,JMock 2.5.1和EasyMock 3.0为Java开发者提供了强大而灵活的单元测试工具,通过模拟对象的行为,可以帮助我们编写出更加健壮、可靠的代码。结合JUnit,这两个框架可以极大地提升测试效率和质量,是每个Java...
总结起来,easymock.jar是Java开发者进行单元测试的强大工具,通过模拟对象和设置期望,可以有效地测试代码的各个部分,提高代码质量和可靠性。掌握Easymock的使用,无疑能提升我们的测试能力和软件开发效率。
Easymock 3.0 是一个...总结来说,Easymock 3.0是Java单元测试的重要工具,通过与JUnit的结合,能够有效地创建和控制mock对象,从而确保代码的正确性和稳定性。了解并熟练使用这些知识点,对于提升软件质量至关重要。
总结起来,Easymock 3.2提供了全面的功能,帮助开发者编写更可靠的单元测试。通过深入学习这个压缩包中的内容,你不仅可以学会如何使用Easymock,还能提高自己在单元测试和软件设计方面的专业能力。
总结来说,《Learning EasyMock3.0 By Official Example》是一个深入了解和掌握 EasyMock 的宝贵资源。通过学习官方示例,开发者不仅能学会如何创建和管理模拟对象,还能了解如何在实际项目中有效地应用这些技术,...
总结,部署EasyMock在CentOS 7上涉及多个步骤,包括安装Node.js,MongoDB,Redis,以及下载和配置EasyMock项目。完成这些步骤后,你应该能够在本地环境中运行并访问EasyMock服务。注意,生产环境中,为了安全,建议...
总结来说,这个例子展示了如何使用Easymock来测试Servlet的`doGet`方法,确保其在各种输入和异常情况下都能正确工作。通过这种方式,开发者可以更自信地重构和修改代码,因为他们知道每个单元都已经过严格的测试。
总结一下,Easymock3.1和PowerMock1.4.10是Java单元测试的重要工具,它们与JUnit配合使用,可以帮助开发者对各种复杂情况进行精确的测试,提高代码质量。在实际项目中,正确地使用这些库可以大大提升测试的覆盖率和...
总结,Junit和EasyMock的结合使用能够有效地进行单元测试,确保代码的健壮性和可靠性。理解并熟练掌握这两个工具,对于提升软件开发的质量和效率至关重要。在实践中,不断通过案例分析和实践,你可以进一步提升单元...
**总结** EasyMock和PowerMock是Java单元测试中的有力工具,它们可以帮助开发者创建和管理模拟对象,从而在测试中隔离复杂依赖,提高测试的效率和覆盖率。EasyMock适用于大部分模拟需求,而PowerMock则提供更高级的...
Easymock是一款广泛使用的Java单元测试...总结,Easymock是Java单元测试中的重要工具,通过掌握其基本概念和使用步骤,开发者可以有效地编写出高效、可靠的测试代码。同时,结合提供的教程和资源,学习过程将更加顺畅。
EasyMock 是一个强大的Java...总结,EasyMock 是一个强大而灵活的工具,可以帮助开发者编写更加健壮的单元测试。通过熟练掌握其核心概念和使用技巧,你可以更好地管理代码的依赖,提升测试覆盖率,从而提高代码质量。
总结来说,EasyMock是Java单元测试中的有力工具,通过模拟对象的行为,我们可以编写出更健壮、更独立的测试。理解并熟练运用EasyMock,可以提升代码质量,降低维护成本,为软件开发保驾护航。通过不断学习和实践,...
EasyMock 是一个强大的...总结而言,EasyMock 2.3 是一个强大且灵活的模拟工具,它简化了单元测试的编写,特别是当测试涉及复杂对象交互时。通过理解并熟练使用它的核心功能,开发者可以编写出更加健壮和可靠的代码。
在"学习总结"这个文件中,你可能找到了关于如何集成和运用这三个工具的笔记,包括安装步骤、基本用法、常见问题及解决策略等。深入理解并熟练运用Easymock、Selenium和JUnit,能够帮助开发者编写出高质量的代码,...
总结,EasyMock作为一款强大的模拟工具,为Java开发者提供了编写高效、可控的单元测试的可能。通过理解其工作原理和使用方法,我们可以更好地进行软件测试,提升代码质量,降低维护成本。然而,随着技术的发展,...