Maven无法对cloudbees进行单元测试

时间:2013-07-25 23:18:16

标签: android unit-testing maven cloudbees

我在cloudbees上有一个基于Maven的Android项目设置ci。从BitBucket检索src后,我的Jenkins工作就是运行'install'目标。一切都很好。唯一的问题是单元测试无法运行。

在IntelliJ(本地)中运行完全相同的目标会找到并运行单元测试。

我的pom看起来像这样 - >

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.odl</groupId>
    <artifactId>GhostRunner</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>GhostRunner</name>

    <properties>
        <platform.version> 4.1.1.4
            </platform.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>${platform.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.robolectric</groupId>
            <artifactId>robolectric</artifactId>
            <version>2.0-alpha-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-android</artifactId>
            <version>4.45</version>
        </dependency>
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-core</artifactId>
            <version>4.45</version>
        </dependency>
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-jdbc</artifactId>
            <version>4.45</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.8.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                    <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                    <resourceDirectory>${project.basedir}/res</resourceDirectory>
                    <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                    <sdk>
                        <platform>16</platform>
                    </sdk>
                                        <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.15</version>
            </plugin>
        </plugins>
    </build>
</project>

jenkins输出如下 - &gt;

[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ GhostRunner ---
[INFO] No tests to run.
mojoSucceeded org.apache.maven.plugins:maven-surefire-plugin:2.15(default-test)
[JENKINS] Recording test results
mojoStarted com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0(default-emma) 

另一个有趣的一点是,我可以删除surefire依赖项,单元测试仍然可以正常运行IntelliJ中的安装目标。由于某些原因,Maven在Cloudbees上从Jenkins运行时没有看到测试。

感谢智慧。

以下是cloudbees所说的内容::

  

这里的问题是IntelliJ正在为您编译测试类   并将这些课程纳入   $ {project.build.testOutputDirectory}为你。

     

您可以通过执行IntelliJ来本地复制此故障   干净安装(在点击生命周期目标时按住⌘)

     

有两种方法可以解决这个问题。

     

告诉Maven您的测试源不在标准位置

     

将您的测试源放入标准位置。

     

当您处理大量插件时,其中一些插件没有写入   由Apache Maven团队或Codehaus Mojo团队负责   标准目录布局是最好的方法。插件受制于   通常会审查Apache Maven或Codehaus Mojo社区   当你告诉Maven你正在使用a时,请选择更改   非标准布局。不受审核过程影响的插件可以   通常不知道如何正确工作,因此你最终   被迫与标准布局保持一致。

     

Stephen Connolly CloudBees,Inc

我重新组织了我的项目以反映Maven规范,但它仍然没有在cloudbees服务器上运行测试。

这是jenkins控制台输出::

的相关输出
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ GhostRunner ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /scratch/jenkins/workspace/ghost runner/src/test/resources
mojoSucceeded org.apache.maven.plugins:maven-resources-plugin:2.6(default-testResources)
mojoStarted org.apache.maven.plugins:maven-compiler-plugin:3.0(default-testCompile)
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-compiler-plugin:3.0:testCompile (default-testCompile) @ GhostRunner ---
mojoSucceeded org.apache.maven.plugins:maven-compiler-plugin:3.0(default-testCompile)
mojoStarted org.apache.maven.plugins:maven-surefire-plugin:2.15(default-test)
[INFO] 
[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ GhostRunner ---
[INFO] No tests to run.

我猜重要的一点是

  

没有要编译的资源

不知怎的,它仍然不知道测试的位置。

1 个答案:

答案 0 :(得分:1)

根据上述问题中的评论,您似乎没有将测试源文件放入Maven预期的目录结构中。这实际上是Maven配置问题,与CloudBees没有直接关系(除了CloudBees使用vanilla maven来运行你的构建)。如果您尝试通过maven'mvn'命令在本地运行您自己的构建(如CloudBees Jenkins CI作业),您应该会遇到相同的错误。

基于standard Maven directory structure,您应该将测试源放在: src / test / java

如果您想/需要更改默认的maven目录结构,通常可以在pom.xml中提供配置更改来设置这些更改。然而,许多人发现与maven的斗争只会导致更多的痛苦并最终恢复标准。

有关详细信息,请查看有关how to change the default Maven tests directory

的此stackoverflow主题
相关问题