Can';t将PowerMock与Robolectric和Gradle(android)配合使用

Can';t将PowerMock与Robolectric和Gradle(android)配合使用,android,gradle,powermock,robolectric,Android,Gradle,Powermock,Robolectric,我尝试使用PowerMock和Robolectric来模拟我的android项目中的静态方法。我用的是gradle。但我得到了以下例外: Caused by: java.lang.IllegalStateException: PowerMockRule can only be used with the system classloader but was loaded by org.robolectric.bytecode.AsmInstrumentingClassLoader@7e61b85

我尝试使用PowerMock和Robolectric来模拟我的android项目中的静态方法。我用的是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
完整的gradle文件(删除了一些真正不相关的内容):

有没有人有使用Powermockito进行基于机器人的Android单元测试的经验?知道我做错了什么吗?

我创建了一个集成了
Robolectric3
+
RobolectricGradleTestRunner
+
PowerMock
+
Mockito

build.gradle

dependencies {

    ...

    testCompile "org.powermock:powermock-module-junit4:1.6.2"
    testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"
    testCompile "org.powermock:powermock-api-mockito:1.6.2"
    testCompile "org.powermock:powermock-classloading-xstream:1.6.2"
}
测试等级:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 18)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@PrepareForTest(Static.class)
public class DeckardActivityTest {

    @Rule
    public PowerMockRule rule = new PowerMockRule();

    @Test
    public void testStaticMocking() {
        PowerMockito.mockStatic(Static.class);
        Mockito.when(Static.staticMethod()).thenReturn("hello mock");

        assertTrue(Static.staticMethod().equals("hello mock"));
    }
}

上面的答案对我帮助很大,但是我仍然无法用RobelElectric 3和Mockito 2运行它

显然,当使用API级别21运行Robolectric时,桌面java版本中缺少一个类


如果其他人面临类似的问题,本指南将提供一个完整的工作示例,其中包含所有依赖项和设置:

我使用本文尝试使其工作(使用文中提到的库),但它尚未工作。我觉得这是gradle和android的问题。请展示整个build.gradle文件。我更新了原始帖子并添加了更多的gradle文件。希望你有个主意!!:)@维特,你是怎么做到的?
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
           jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
    }
}

subprojects {
    apply plugin: 'android-sdk-manager'
}

allprojects {
    repositories {
           jcenter()
    }
}
dependencies {

    ...

    testCompile "org.powermock:powermock-module-junit4:1.6.2"
    testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"
    testCompile "org.powermock:powermock-api-mockito:1.6.2"
    testCompile "org.powermock:powermock-classloading-xstream:1.6.2"
}
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 18)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@PrepareForTest(Static.class)
public class DeckardActivityTest {

    @Rule
    public PowerMockRule rule = new PowerMockRule();

    @Test
    public void testStaticMocking() {
        PowerMockito.mockStatic(Static.class);
        Mockito.when(Static.staticMethod()).thenReturn("hello mock");

        assertTrue(Static.staticMethod().equals("hello mock"));
    }
}