在Eclipse RCP Tycho项目中使用Mockito和JUnit需要哪些依赖项

时间:2013-08-08 09:47:40

标签: junit osgi tycho hamcrest tycho-surefire-plugin

这是我目前的测试片段:

<packaging>eclipse-test-plugin</packaging>

<dependencies>
    <dependency>
        <groupId>org.junit</groupId>
        <artifactId>com.springsource.org.junit</artifactId>
        <version>4.7.0</version>
    </dependency>
</dependencies>

使用以下插件配置:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-surefire-plugin</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <dependencies>
            <dependency>
                <type>p2-installable-unit</type>
                <artifactId>org.eclipse.equinox.ds</artifactId>
            </dependency>
            <dependency>
                <type>p2-installable-unit</type>
                <artifactId>org.apache.felix.gogo.shell</artifactId>
            </dependency>
        </dependencies>
        <providerHint>junit47</providerHint>
        <argLine>-ea</argLine>
    </configuration>
</plugin>

我使用POM优先方法来解决依赖关系:

<pomDependencies>consider</pomDependencies>

上面的JUnit版本是我能找到的唯一一个打包为捆绑包的版本。

问题是我找不到允许我在片段中一起使用JUnit和Mockito的匹配项。

我的常见问题是:

  • 来自Maven Central的Mockito-core需要Hamcrest 1.0-2.0,但JUnit捆绑包在4.7.0版中导出Hamcrest
  • Springsource存储库中没有可用的junit-dep软件包
  • 当我添加另一个Hamcrest包时,我在JUnit(4.7.0)和Hamcrest包(1.3)导出的版本之间存在版本冲突

我想避免从JUnit,Hamcrest和Mockito创建我自己的包。

1 个答案:

答案 0 :(得分:17)

我发现来自Eclipse Orbit的JUnit,Hamcrest和Mockito的包装器捆绑在一起工作。

对于(当前)最新的Orbit版本,包括JUnit 4.11,Hamcrest 1.1(在1.3版本中使用Hamcrest Core)和Mockito 1.8.4,只需将以下代码片段添加到您的POM中:

<repositories>
    <repository>
        <id>orbit-kepler</id>
        <url>http://download.eclipse.org/tools/orbit/downloads/drops/R20130517111416/repository/</url>
        <layout>p2</layout>
    </repository>
</repositories>

在Eclipse Orbit的包装器中,org.junit包导出包org.hamcrest.core的部分内容。但是,Mockito需要org.hamcrest.core包的完整内容。为了防止Mockito和JUnit捆绑包之间的意外连接,导出标记有强制属性。不幸的是,p2 doesn't take these into account(和Tycho使用p2进行依赖项解析),所以你需要给你的片段的依赖性解析(使用Mockito)一个额外的提示:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <dependency-resolution>
            <extraRequirements>
                <requirement>
                    <type>eclipse-plugin</type>
                    <id>org.hamcrest</id>
                    <versionRange>0.0.0</versionRange>
                </requirement>
            </extraRequirements>
        </dependency-resolution>
    </configuration>
</plugin>

这确保在依赖项解析期间使用org.hamcrest包,并且可以成功连接Mokito的导入。