我想在我的单元测试(JUnit 4.12)中使用PowerMock。PowerMock + Mockito + Maven Android应用程序显示Dex加载器错误
我已经有了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依赖项(以及所有使用它的单元测试)时,项目现在可以在我的设备上运行而没有问题。
EDIT 2
用命令mvn dependency:list
的帮助中的评论所说,我已经发现了这一点:
- 的JUnit对org.hamcrest的依赖:hamcrest核心: jar:1.3:test
- PowerMock还对hamcrest库有依赖关系
看来问题只有在项目中使用的库的最新版本时才会发生。我试图删除JUnit的依赖,只使用powermock和启动时的错误是一样的。所以我不认为这是一个“碰撞”问题,但可能与hammrest版本与powermock的问题?而且我不知道为什么它的使用在发射,因为它是在“测试”范围......
编辑3 我从与Maven从头开始创建一个Android项目,看它是否与我的主要应用程序的问题或与Maven合作。问题似乎在Maven或PowerMock依赖中。如果你想尝试,here is the complete java project。在这个项目中没有单元测试,我只想在我的Android机器上运行它。我仍然收到完全相同的讯息。
这是器乐或robolectric测试? –
如果您在控制台'mvn -o dependency:list \ |运行控制台,您是否看到harmcrest重复的依赖项? grep“:。*:。*:。*”\ | cut -d] -f2- \ | sed's /:[a-z] * $ // g'\ |排序-u' –
这是一个Android应用程序。我使用单元测试(在Windows机器上)。当我运行该应用程序时,它运行在Android设备上。所以我想这不是仪器或roblectric测试(不知道这是什么) –