Robolectric单元测试 - PowerMock导致的ClassCastException

Bug描述:单元测试的时候,多个类同时Mock了一个工具类,每个类单独测试的时候是好的,但是整个项目测试生成测试报告的时候,只有第一个测试通会通过,其他的就提示ClassCastException错误。

仔细看报错会有这么一句:
You might experience classloading issues, disabling the Objenesis cache might help (see MockitoConfiguration)"

原因是这个类用了不同的类加载器加载,我个人理解是第一个测试类用了类加载器A去加载,并进行了缓存。第一个运行正常,第二个测试类又用了另一个加载器B去加载同一个工具类,在转成缓存中的工具类时报ClassCastException错。所以,可以将对象的缓存去掉。参考了这篇文章解决:Mockito with Robolectric: “ClassCastException occurred when creating the proxy”

具体的解决方法:
1、在路径src/test/java下新建包,包名:org.mockito.configuration
2、新建类:MockitoConfiguration

package org.mockito.configuration;

public class MockitoConfiguration extends DefaultMockitoConfiguration {

  @Override
  public boolean enableClassCache() {
    return false;
  }
}

再次跑测试,成功。

我在网上有看到其他的方法,在测试类前面加注解,但是我测试类前加了如下的代码不起作用,或者可能是我加的有问题。如有知道的可以留言下,谢谢。

@PowerMockIgnore ({"org.mockito.*", "org.robolectric.*", "android.*", "androidx.*", "org.powermock.*"})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值