【发布时间】:2015-01-15 20:38:38
【问题描述】:
我正在尝试在我的单元测试 (JUnit 4.12) 中使用 PowerMock。
我已经集成了 Mockito,没有任何问题。 这是一个 Android 应用程序。
当我运行单元测试时,没有问题,静态函数的模拟工作完美。
当我点击 eclipse 中的“播放”按钮在连接的物理机上运行我的应用程序时,我收到此错误:
[2015-01-15 15:22:22 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
[2015-01-15 15:22:22 - CLAP] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
我读到这意味着 PowerMock 不支持 Delvik VM,但我不明白这意味着什么,我无法相信 PowerMock 团队或 Mockito 团队没有找到在 Android 中工作的方法环境!
这是我在 Maven 中与 PowerMock 和 Mockito 相关的依赖项
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
谁能帮帮我?
编辑
我很确定,当我真正运行我的应用程序(不是在测试中)时,我需要做的就是从我的依赖项中删除 PowerMock,但我不知道该怎么做。我正在使用 Eclipse,所以我需要一个可以在这种环境下工作的解决方案。我已经检查了 Maven 的配置文件和排除,但我看不到如何实现这一点。我对 Maven 很陌生。任何帮助将不胜感激。
此外,当我删除 PowerMock 依赖项(以及使用它的所有单元测试)时,该项目现在可以在我的设备上运行而没有问题。
编辑 2
借助评论中建议的命令mvn dependency:list,我发现了这一点:
- JUnit 依赖于 org.hamcrest:hamcrest-core:jar:1.3:test
- PowerMock 还依赖于 hamcrest 库
似乎只有当项目中使用的库的 hamcrest 版本时才会出现问题。我试图删除 JUnit 依赖项,只使用 powermock 之一,启动时的错误是相同的。所以我不认为这是一个“碰撞”问题,但可能是带有 powermock 的 hamcrest 版本的问题???而且我想知道为什么它在启动时使用,因为它在“测试”范围内......
编辑 3 我已经使用 Maven 从头开始创建了一个 Android 项目,以查看它是我的主应用程序还是 Maven 的问题。问题似乎出在 Maven 或 PowerMock 依赖项中。如果你想尝试,here is the complete java project。这个项目没有单元测试,我只想在我的Android机器上运行它。我仍然收到完全相同的消息。
【问题讨论】:
-
这是仪器测试还是机器人测试?
-
如果你在控制台运行
mvn -o dependency:list \ | grep ":.*:.*:.*" \ | cut -d] -f2- \ | sed 's/:[a-z]*$//g' \ | sort -u,你会看到harmcrest重复依赖 -
这是一个安卓应用。我使用单元测试(在 Windows 机器上)。当我运行该应用程序时,它在安卓设备上运行。所以我猜这不是仪器或电子测试(不知道这是什么)
-
我无法运行你的命令,我收到这条消息: grep: : Invalid request code cut: : Invalid request code sed: read error on : Invalid request code
-
那是仪器测试,不知道你在 Windows 上。只需运行
mvn dependency:list并检查是否存在Hamcrest依赖项
标签: android junit mockito powermock