Powermockito 可以在 Android Studio 1.2 中使用吗?

9

我正在使用Android Studio 1.2版本和com.android.tools.build:gradle:1.2.2插件。

尝试1

我在app/build.gradle文件中包含以下内容:

androidTestCompile ('com.google.dexmaker:dexmaker-mockito:1.2')
androidTestCompile ('org.powermock:powermock-mockito-release-full:1.6.2')

但是无法导入PowerMockito包:

error: cannot find symbol
    PowerMockito.mockStatic(DatastoreFactory.class);
    ^

尝试2

我在app/build.gradle中包含以下内容:

androidTestCompile ('org.powermock:powermock-api-mockito:1.6.2') {
    exclude module: 'hamcrest-core'
    exclude module: 'objenesis'
}

androidTestCompile ('org.powermock:powermock-module-junit4:1.6.2') {
    exclude module: 'hamcrest-core'
    exclude module: 'objenesis'
}

这是一个试错的分支,与此处的问答:AndroidStudio/Gradle with powermock有关。
这个代码可以编译,但在运行Mockito时会出现运行时错误。
java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils
    at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
    at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
    at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
    at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:95)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57)
    at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:49)
    at org.powermock.api.mockito.repackaged.CglibMockMaker.createMock(CglibMockMaker.java:24)
    at org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:45)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
    at org.mockito.Mockito.mock(Mockito.java:1285)
    at org.mockito.Mockito.mock(Mockito.java:1163)
    at com.mdsol.naga.FormPusherTest.setUp(FormPusherTest.java:40)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

有人成功地在Android Studio 1.2中使用Powermock吗?请分享您的build.gradle文件 - 谢谢!

1个回答

14

它应该已经很好了。至少在我的情况下,它运行得很好。

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:2.0.5-beta'
    testCompile 'com.android.support:support-v4:22.0.0'
    testCompile ('org.powermock:powermock-api-mockito:1.6.2') {
        exclude module: 'hamcrest-core'
        exclude module: 'objenesis'
    }
    testCompile ('org.powermock:powermock-module-junit4:1.6.2') {
        exclude module: 'hamcrest-core'
        exclude module: 'objenesis'
    }
}

同时,请记得在Android Studio的Build Variants的Test Artifact部分选择Unit Tests

您需要确保使用正确的项目结构、Gradle版本和testCompile。

您可以在此处找到相关文章:http://vexdev.com/2015/05/06/unit-testing-android/

还有整个项目:https://github.com/vexdev/AndroidUnitTest


1
由于某些原因,我需要使用androidTestCompile而不是testCompile,否则我会收到以下错误:Error:(135, 0) Gradle DSL method not found: 'testCompile()' - jtomson
我想我明白了 - 您是否按照此答案使用Robolectric在JVM上运行?https://dev59.com/Pl4b5IYBdhLWcg3whB-V#29024318 - jtomson
1
不,我根本没有使用Robolectric。你需要确保在Android Studio上执行单元测试(在左侧检查构建变体,选择构建工件:Unit Tests)。请在我的GitHub示例项目中查看。 - Luca Vitucci
@jtomson,你在Android Studio实验设置中启用了单元测试吗? - Sam Dozor
1
啊,我明白了 - 我使用的是旧版Gradle插件。切换到'com.android.tools.build:gradle:1.1.0'并使用这些依赖项就解决了问题!谢谢。 - jtomson
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接