• 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))  

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

  • 相关阅读:
    利用Airtest开发爬虫
    添加mitmproxy证书为安卓系统证书(模拟器亦可)
    mac下 安卓模拟器抓包推荐
    mac上appium连接ios
    HomeBrew和HomeBrew Cask的安装和使用
    NOIP2020 游记
    CSP2020 游记
    随机数之 xorShift128Plus 板子
    最大单词长度乘积(力扣第318题)
    两个整数之和(力扣第371题)
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3832238.html
Copyright © 2020-2023  润新知