EasyMock问题总结

1.

Java代码  

  1. java.lang.IllegalStateException: missing behavior definition for the preceding method call getBidwordSequence()

出现这样的错误请仔细检查getBidwordSequence()是void方法,还是有返回值,返回值的类型是不是写对了。

2.

Java代码  

  1. java.lang.IllegalStateException: 0 matchers expected, 1 recorded.
  2. This exception usually occurs when matchers are mixed with raw values when recording a method:
  3. foo(5, eq(6));  // wrong
  4. You need to use no matcher at all or a matcher for every single param:
  5. foo(eq(5), eq(6));  // right
  6. foo(5, 6);  // also right

这个错误是要检查出错方法的前面方法是否多添加了匹配器(anyObject),尤其注意andReturn();easymock在andReturn()这个方法中入参不能是anyObject的。必须要给出方法的入参。

Java代码  

  1. //错误写法
  2. EasyMock.expect(subwayService.auditActivityRejected(EasyMock.anyObject(List.class)))
  3. .andReturn(<span style="#ff6600;">anyObject(List.class)</span>
  4. );
  5. //正确写法
  6. EasyMock.expect(subwayService.auditActivityRejected(EasyMock.anyObject(List.class)))
  7. .andReturn(<span style="#ff6600;">null </span>
  8. );

3.

Java代码  

  1. 1.EasyMock.expect(subwayService.<span style="#ff6600;">auditActivityRejected</span>
  2. (EasyMock.anyObject(List.class))).andReturn(1);
  3. 2.EasyMock.expect(subwayService.<span style="#ff6600;">auditActivityVerified</span>
  4. (EasyMock.anyObject(List.class))).andReturn(1);

如果你原本希望录制脚本1,结果由于copy代码录制成了脚本2,这样你期待方法返回结果0,结果方法始终返回默认的0,而且由于你可能对于返回结果是0的抛出了自定义的异常,可怕的后果是verify就验证不了该方法,直接会显示你抛出的异常,如果不细心,这个错误还是很隐蔽的。所以录制的脚本一定要和调用的方法一致。

4.

Java代码  

  1. notifyFacade.addADGroup( isA(List.class));
  2. //如果adgroup是空的,
  3. java.lang.AssertionError:
  4. Unexpected method call addADGroup(null):
  5. addADGroup(isA(java.util.List)): expected: 1, actual: 0
  6. 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则不会出现类似的问题。所以正确的写法如下

Java代码  

  1. notifyFacade.addADGroup( anyObject(List.class))

除了上述问题,还有谁碰上比较难受的异常的时候可以提交给我,总结到这个文档里面, 以后还有同事碰上类似问题可以先在这里找找解决方法。

EasyMock问题总结

时间: 2024-07-31 11:09:05

EasyMock问题总结的相关文章

EasyMock

JUnit是Java开发中常用的单元测试工具,对方法的测试很合适,但是一些情况下,JUnit就不是很适用了: 对象是一个复杂的对象,对象很难被创建,对象的某些行为很难触发 .这时可以使用Mock来创建对象进行测试,同时还可以Mock一个未实现的接口来进行测试. EasyMock是针对Java的Mock工具,通过 EasyMock,我们可以为指定的接口动态的创建 Mock 对象:     使用 EasyMock 生成 Mock 对象           设定 Mock 对象的预期行为和输出    

powerMock比easyMock和Mockito更强大(转)

powerMock是基于easyMock或Mockito扩展出来的增强版本,所以powerMock分两种类型,如果你习惯于使用easyMock的,那你就下载基于easyMock的powerMock,反之你喜欢用mockito的话就下载另一种PowerMock. powerMock之所以说它更强大是因为它解决了easyMock和Mockito没有解决的问题,就是可以模仿static,private和final的方法.举例如下: public class User{ private User use

java.lang.VerifyError 在使用PowerMock EasyMock进行单元测试

java.lang.VerifyError:Stack map does not match the one at exception handler 385 in method ... at offset 377 我使用的 jar包( 下面是认为跟这个问题有关系的jar包)如下: antrl-3.3-complete.jar cglib-2.2.jar cglib-nodep-2.2.2.jar easymock-3.2.jar mockito-all-1.9.5.jar persistent

easymock+junit+spring学习&#183;

Easymock学习                                Author:luojie 1.       Easymock简介 EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试. 用于白盒测试,与预期结果不同,才去分析代码. 2.       Easymock + junit 单元测试 EasyMock采用"记录-----回放"的工作模式,基本使用步骤: *         创建Mock对

EASYMOCK 使用说明

EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库.它提供对接口的模拟,能够通过录制.回放.检查三步来完成大体的测试过程,可以验证方法的调用种类.次数.顺序,可以令 Mock 对象返回指定的值或抛出指定异常.通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行. 根据指定的接口或类,EasyMock 能够动态的创建 Mock 对象(EasyMock 默认只支持为接口生成 Mock 对象,如果需要为类生成 Mock 对象,在 EasyMo

聊聊单元测试(一)——EasyMock

一.单元测试是保证软件质量的重要方法. 单元测试是对系统中某个模块功能的验证,但我们总会遇到这样那样的问题,导致测试代码很难编写.最直接的一个原因便是强耦合关系,被测试者依赖一些不容易构造,比较复杂的对象,如:如果要测试一个servlet,我们必须获得HttpServletRequest,甚至需要一个Web容器:如果要测试Dao层,我们可能要获得JDBC相关对象,最终获得ResultSet.这些对象的构建并不那么容易,如果我们使用Mock方法(常见的一种单元测试技术,它的主要作用是模拟一些在应用

窥探EasyMock(1)基础使用篇

EasyMock的应用分为5步: 1. 使用 EasyMock 生成 Mock 对象: Java代码   SomeInterface mockObj = createMock(SomeInterface.class); 如果想对一个类(而非接口)生成mock对象,需要EasyMock Class Extension 如果是一个相对复杂的测试用例,需要对多个接口生成mock对象,使用MockControl来管理: Java代码   IMocksControl control = createCon

Mock之easymock, powermock, and mockito

easymock, powermock, and mockito Easymock Class Mocking Limitations To be coherent with interface mocking, EasyMock provides a built-in behavior for equals(), toString(), hashCode() and finalize() even for class mocking. It means that you cannot reco

介绍EasyMock

你能够依据调用次序来mock同一个办法: EasyMock.expect(request.getParameter("userName")).andReturn("trilogy").once(); EasyMock.expect(request.getParameter("userName")).andReturn(null).once(); 当第一次履行request.getParameter("userName")的时分

EasyMock 常见异常

1. java.lang.IllegalStateException: calling verify is not allowed in record state 含义:不允许在记录状态(record state)调用verify方法. 发生场景:不小心在调用EasyMock.replay(mockObj)之前,调用了EasyMock.verify(mockObj); 2. java.lang.AssertionError: Unexpected method call IDao.search(