Unit Test里报错can't find constructor(找不到类构造器) 的解决方法

    写单元测试时需要自己造一个ServerException,这个ServerException是自定义的,有一系列构造方法,一开始相安无事,直到我调用了其中一个构造方法时,出现了错误,提示can't find constructor找不到构造器,而且这个错误在运行时才报出,IDE并没有自动检查出错误,我明明是按照构造器中的参数传入的呀!

    经过和其他构造方法对比,这个出现错误的构造方法特殊之处在于其参数里有一个ErrorList 对象,而其他的都是基本类型和string, 接下来我通过debug模式断点调试进入里class.java 文件中,找到里面的getConstructor方法,我发现构造方法里ErrorList对象和UT里传入的ErrorList对象,对应的class Id(就是class@xxxx)是不一样的,所以他们被当成了不同的类型,然后我继续看他们对应的class里的数据,发现他们的classloader是不一样的,这应该就是问题的根源所在,UT里用的是mockClassLoader, 而构造方法希望传入的是由appClassLoader加载的对象。

    接下来在网上找到了解决方法:在UT 的java文件开头加一个注解@PowerMockIgnore("xx.xx.xx.ErrorList") 里面填上ErrorList这个类型的全限定名,就可以正常运行里。因为PowerMock会使用自定义的类加载器来加载被修改过的类,从而达到打桩的目的,这里@PowerMockIgnore就是对特定路径不用自定义的类加载器。如果在UT里报了 ClassCastException,同样也是用该注解解决,具体可以看网上的资料。

     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值