我有一個基於Maven的Android項目設置,用於雲上的ci。我的Jenkins工作只是在從BitBucket中檢索src之後運行「安裝」目標。一切都很好。唯一的問題是單元測試無法運行。Maven無法在雲上運行單元測試
在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>
詹金斯輸出這樣的 - >
[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)
另一個有趣的一點是,我可以刪除神火依賴和單元測試仍然針對IntelliJ中的安裝目標運行良好。出於某種原因,Maven在Cloudbees上從Jenkins運行時看不到測試。
智慧收到感謝。
這裏是CloudBees的不得不說::
這裏的問題是,是的IntelliJ編譯測試類爲您 並把這些類到 $ {} project.build.testOutputDirectory爲您。
您可以通過獲取的IntelliJ執行 乾淨安裝在本地複製此故障(按住⌘而在生命週期的目標點擊)
有兩種方法來解決這個問題。
告訴Maven的,你的測試源不是在標準位置
把你的測試源到標準位置。
當你在處理大量的插件,其中一些未由Apache Maven的團隊或Codehaus的Mojo的小組撰寫 的,與 標準的目錄結構會是最好的方式。根據 對Apache Maven或Codehaus Mojo社區的評論,插件通常會在您告訴Maven您正在使用非標準佈局的 時收到更改。不受該審覈流程限制的插件 通常不知道如何正確工作,因此您最終會被迫與標準版面保持一致。
斯蒂芬·康諾利CloudBees的,公司
我已經重新組織我的項目,以反映Maven的規範,但它仍然不能運行CloudBees的服務器上的測試。
下面是從詹金斯控制檯輸出::
[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.
我想最重要的一點是輸出相關
沒有源編譯
不知怎的,它仍然不知道測試的地方。
你在哪裏找到你的單元測試? 'src/test/java',並且你將它們命名爲['* Test * .java','* Test.java'和'* TestCase.java'](http://maven.apache.org/surefire/maven -surefire-插件/測試mojo.html#包括)。 – khmarbaise
它們在/ src/test下,並且都以測試的格式命名。你認爲測試文件夾下的java文件夾很重要嗎? –
是的,它是必需的,因爲它是[Maven中的默認](http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)'src/main/java'用於單元測試的生產代碼'src/test/java'。在單元測試中,可以在生產代碼和'src/test/resources'中使用資源的'src/main/resources'。 – khmarbaise