Tycho:如果JUnit测试失败,如何防止部署?

时间:2011-08-31 13:16:47

标签: unit-testing maven junit osgi tycho

我得到了eclipse-plugin一些单元测试 在maven中,我将单元测试保存在同一个包中,并指定junit作为pom.xml中的测试依赖项 现在我想切换到tycho,我读到tycho正在寻找一个具有相同名称的包以及一个被执行的后缀".tests"。但是我想将我的单元测试保留在测试的bundle中,这样如果任何测试失败,bundle的构建就会失败。否则,maven可能会在单元测试未成功完成的情况下安装/部署工件。

有没有办法使用tycho将单元测试保持在同一个捆绑中?
你如何在tycho构建中管理单元测试?

更新:好的我现在有两个单独的捆绑包eclipse-plugineclipse-test-plugin。 Tycho在同一个反应堆中构建它们,但是我的eclipse-plugin部署了,尽管单元测试失败了。现在我的nexus repo中有一个破损的神器...... 当单元测试没有成功完成时,有没有办法强制执行buildfailure?

3 个答案:

答案 0 :(得分:1)

单元测试不能保存在同一个包中,因为tycho使用MANIFEST优先方法来依赖。

如果您将测试和生产代码保存在同一个包中,您将使用测试范围的依赖项(如junit)污染您的高效包。

与maven不同,OSGi没有依赖项的“范围”属性。

答案 1 :(得分:1)

我知道这个话题很老,但我找到了这么简单的解决方案。 您可以配置将在构建结束时部署工件。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.8.2</version>
            <configuration>
                <deployAtEnd>true</deployAtEnd>
            </configuration>
        </plugin>

如果您没有忽略测试中的失败,并且如果有些失败,则不会部署任何工件。

答案 2 :(得分:-1)

这实际上是Tycho的限制:您不能在同一模块中进行测试和生产代码,因此如果您调用mvn clean deploy,则在执行相应的测试之前部署生产工件

要仅在成功执行测试后进行部署,有一个简单的解决方法:首先使用mvn clean verify运行所有测试,并且只有在成功运行mvn clean deploy的构建时才会运行。 (如果您有不稳定的测试,您甚至可能希望在第二次调用中使用-DskipTests禁用测试执行,以确保您不会进行部分部署。)