如何让powermock与dexmaker一起工作

vmjh9lq9  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(568)

我正在尝试使用以下build.gradle配置将powermock合并为android测试的依赖项:

dependencies{
    compile 'com.android.support:appcompat-v7:21.0.+'
    androidTestCompile('org.mockito:mockito-core:1.9.5')
    androidTestCompile('com.google.dexmaker:dexmaker:1.2')
    androidTestCompile('com.google.dexmaker:dexmaker-mockito:1.2')
    androidTestCompile('org.powermock:powermock-module-junit4:1.5.5') {
        exclude module: 'junit'
    }
    androidTestCompile('org.powermock:powermock-api-mockito:1.5.5') {
        exclude module: 'mockito-all'
    }
}

但是,编译器抱怨

Error:Gradle: Execution failed for task ':app:packageDebugTest'.
> Duplicate files copied in APK mockito-extensions/org.mockito.plugins.MockMaker
    File 1: ~/.gradle/caches/modules-2/files-2.1/com.google.dexmaker/dexmaker-mockito/1.2/b99884a4c6ef6335ba376f79aa79632b2421c17c/dexmaker-mockito-1.2.jar
    File 2: ~/.gradle/caches/modules-2/files-2.1/com.google.dexmaker/dexmaker-mockito/1.2/b99884a4c6ef6335ba376f79aa79632b2421c17c/dexmaker-mockito-1.2.jar

查看jar结构,我注意到dexmaker和powermock都声明了 MockMakermockito-extensions
什么是模仿者?它们有何不同?最重要的问题是:有没有可能让powermock与dexmaker很好地工作?
提前谢谢。任何帮助都将不胜感激。

brqmpdu1

brqmpdu11#

mockmaker是一个胶水模块,它将dexmaker与mockito集成在一起。它完成了mockito使用dalvik.dex文件而不是jvm.class文件生成具体类所必需的工作。
powermock有可能与dexmaker一起工作,但是高级powermock特性不太可能工作。powermock特别宣传:
powermock使用一个定制的类加载器和字节码操作来支持对静态方法、构造函数、最终类和方法、私有方法、静态初始化器的删除等的模拟。
这个自定义类装入器不太可能在dalvikvm上工作。

ryhaxcpt

ryhaxcpt2#

我也有同样的问题,我在这里找到了解决办法。它需要一些手工工作,您必须自己修改jar文件。
恩帕里哈尔的建议如下。
制作powermock-api-mockito-1.5.5.jar的备份副本
将powermock-api-mockito-1.5.5.jar重命名为powermock-api-mockito-1.5.5.zip
解压缩powermock-api-mockito-1.5.5.zip
光盘powermock-api-mockito-1.5.5/
rm-rf mockito扩展
jar cf powermock-api-mockito-1.5.5.jar meta inf/org/
把新jar放进你的文件夹里。
这个方法对我有效。让我知道它是否也适合你。
而且,我可以看到我们使用的是相同的依赖关系。在我的例子中,我不得不手动删除hamcrest.jar和objenesis.jar,因为有confilcts。
希望有帮助。

xxls0lw8

xxls0lw83#

你可以试着把这个放在你的版本里。grad尔,它解决了我同样的问题

android{
...

packagingOptions{
    exclude 'mockito-extensions/org.mockito.plugins.MockMaker'
}

...

}

相关问题