相关疑难解决方法(0)

不能将 PowerMock 与 Robolectric 和 Gradle (android) 一起使用

我尝试在我的 android 项目中使用 PowerMock 和 Robolectric 来模拟静态方法。我正在使用gradle。但我收到以下异常:

Caused by: java.lang.IllegalStateException: PowerMockRule can only be used with the system classloader but was loaded by org.robolectric.bytecode.AsmInstrumentingClassLoader@7e61b85
at org.powermock.modules.junit4.rule.PowerMockRule.<clinit>(PowerMockRule.java:35)
... 47 more
Run Code Online (Sandbox Code Playgroud)

我的测试类看起来像这样:

...
import org.junit.Rule;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.powermock.modules.agent.PowerMockAgent;
import org.powermock.core.classloader.annotations.*;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.modules.junit4.rule.PowerMockRule;

@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@Config(manifest = "./src/main/AndroidManifest.xml",emulateSdk = 18)
public class MyTest {

    @Rule
    public PowerMockRule rule = new PowerMockRule();


    @Test
    public void test() {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

完整的 gradle 文件(删除了一些真正不相关的内容):

apply plugin: …
Run Code Online (Sandbox Code Playgroud)

android powermock gradle robolectric

6
推荐指数
1
解决办法
3750
查看次数

Robolectric和Powermock之间的类加载冲突

我正在尝试编写一个需要Robolectric 2.2和PowerMock的测试,因为测试中的代码依赖于一些Android库和第三方库以及我需要模拟的最终类.

鉴于我被迫使用Robolectric测试跑步者:

@RunWith(RobolectricTestRunner.class)
Run Code Online (Sandbox Code Playgroud)

...我无法使用PowerMock测试运行器,因此我尝试使用PowerMock java代理替代方案,目前为止没有运气.

我根据本指南设置了所有内容,但是我遇到了javaagent库和robolectric通过它与asm-1.4的依赖关系所需的类之间的冲突问题.两者都依赖于

org.objectweb.asm.ClassVisitor

但是javaagent-1.5.1附带了自己的版本,其中ClassVisitor是一个接口,而同一命名空间的asm-1.4版本是一个抽象类,在运行时有相应的错误:

java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.ClassNode has interface org.objectweb.asm.ClassVisitor as super class
Run Code Online (Sandbox Code Playgroud)

我甚至试图修改javaagent库jar以完全删除那里的org.objectew.asm类,但由于org.objectweb.asm包中只需要运送其他类所需的ClassNotFoundException,因此无效在javaagent库jar中,而不是在asm中.

有任何想法吗?根据示例,代理似乎与至少Spring测试运行器一起正常工作.

powermock robolectric

5
推荐指数
1
解决办法
926
查看次数

标签 统计

powermock ×2

robolectric ×2

android ×1

gradle ×1