首页 > 代码库 > EasyMock问题总结

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. //正确写法  
  7. EasyMock.expect(subwayService.auditActivityRejected(EasyMock.anyObject(List.class)))  
  8. .andReturn(<span style="#ff6600;">null </span>  
  9. );  

 

 

      3.

Java代码  收藏代码
  1. 1.EasyMock.expect(subwayService.<span style="#ff6600;">auditActivityRejected</span>  
  2.   
  3.   
  4.   
  5.   
  6. (EasyMock.anyObject(List.class))).andReturn(1);  
  7. 2.EasyMock.expect(subwayService.<span style="#ff6600;">auditActivityVerified</span>  
  8.   
  9.   
  10. (EasyMock.anyObject(List.class))).andReturn(1);  

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

 

     4.

Java代码  收藏代码
  1. notifyFacade.addADGroup( isA(List.class));  
  2.   
  3. //如果adgroup是空的,  
  4. java.lang.AssertionError:   
  5.   Unexpected method call addADGroup(null):  
  6.     addADGroup(isA(java.util.List)): expected: 1, actual: 0  
  7. 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))  

 

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