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.*"})