PowerMock+;莫基托+;Android应用程序上的Maven显示Dex加载程序错误

PowerMock+;莫基托+;Android应用程序上的Maven显示Dex加载程序错误,android,junit,mockito,powermock,Android,Junit,Mockito,Powermock,我试图在单元测试(JUnit4.12)中使用PowerMock 我已经整合了Mockito,没有任何问题。 这是一个Android应用程序 当我运行单元测试时,没有问题,静态函数的模拟工作得非常好 当我在eclipse中单击“播放”按钮在连接的物理机器上运行我的应用程序时,我收到以下错误: [2015-01-15 15:22:22 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/hamcrest/Descri

我试图在单元测试(JUnit4.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>

org.mockito

. 这个项目中没有单元测试,我只想在我的Android机器上运行它。我仍然收到完全相同的消息。

我终于解决了这个问题,但我不完全理解。非常感谢他的帮助,这也为我指明了正确的方向

问题似乎是Maven在嵌套依赖项中的重复.jar文件方面有一个大问题。通过使用类搜索,我发现hamcrest类名“Description”在我的项目中出现了3次

因此,我对如何在Maven中排除依赖项做了一些研究,并发现您可以在Maven Pom编辑器中完成所有这些工作。您可以单击“依赖项”选项卡中的依赖项并执行“删除”

问题的其余部分只是删除重复的Hamcrest依赖项,以便在我的项目中只有一个依赖项。在解决了这个问题之后,第二个库出现了同样的问题“obgenesis”。我做了同样的修复,它最终成功了

Eugen Martynov在评论中向我指出,我根本没有使用Maven。也许那是真的,请容忍我!至少现在,我对Maven了解多一点,它做了我项目中需要做的事情

以下是最终的依赖项代码:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <exclusions>
        <exclusion>
            <artifactId>hamcrest-core</artifactId>
            <groupId>org.hamcrest</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.10.8</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <artifactId>objenesis</artifactId>
            <groupId>org.objenesis</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
    <optional>true</optional>
    <exclusions>
        <exclusion>
            <artifactId>junit</artifactId>
            <groupId>junit</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
    <optional>true</optional>
    <exclusions>
        <exclusion>
            <artifactId>mockito-all</artifactId>
            <groupId>org.mockito</groupId>
        </exclusion>
    </exclusions>
</dependency>

朱尼特
朱尼特
4.12
汉克雷斯特岩芯
org.hamcrest
org.mockito
莫基托磁芯
1.10.8
测试
正视
org.objenesis
org.powermock
powermock-module-junit4
1.6.1
测试
真的
朱尼特
朱尼特
org.powermock
powermock api mockito
1.6.1
测试
真的
莫基托所有
org.mockito

这是仪器测试还是机器人测试?如果你在控制台中运行,你会看到harmcrest重复的依赖项吗?
mvn-o依赖项:list\\ grep:.*:.*:.\\\ cut-d]-f2-\\ sed's/:[a-z]$//g'\\ sort-u
这是一个android应用程序。我使用单元测试(在windows机器上)。当我运行应用程序时,它是在安卓设备上运行的。所以我猜这不是仪器测试或RobElectric测试(不知道这是什么)我无法运行您的命令,我收到以下消息:grep::Invalid request code cut::Invalid request code sed:read error on:Invalid request code这是仪器测试,不知道您在windows上。只需运行
mvn dependency:list
并检查是否存在
Hamcrest
dependencyGood即可解决它。两条评论:maven对嵌套依赖项没有问题,只是android构建对重复依赖项要求严格;我鼓励您学习和使用gradle(和Android Studio),因为它是由Google支持的,maven不是(eclipse也不是很快),谢谢!我们很快就会看到的!