2016-09-27 21 views
1

私はテストしたいKotlinアプリケーションを持っています。私のテスト(.kt)ファイルはEclipseで成功して実行されます。 (テスト自体はh2 mock jdbcテストです)。Kotlin - Mavenテストを実行していません

releases: [enabled => true, update => never] 
] 
[DEBUG] (s) reportFormat = brief 
[DEBUG] (s) reportsDirectory = C:\Users\Ivar\workspace\anotherworkspace\newrestservice\complete\target\surefire-reports 
[DEBUG] (f) rerunFailingTestsCount = 0 
[DEBUG] (f) reuseForks = true 
[DEBUG] (s) runOrder = filesystem 
[DEBUG] (f) shutdown = testset 
[DEBUG] (s) skip = false 
[DEBUG] (f) skipAfterFailureCount = 0 
[DEBUG] (s) skipTests = false 
[DEBUG] (s) suiteXmlFiles = [] 
[DEBUG] (s) testClassesDirectory = C:\Users\Ivar\workspace\anotherworkspace\newrestservice\complete\target\test-classes 
[DEBUG] (s) testFailureIgnore = false 
[DEBUG] (s) testNGArtifactName = org.testng:testng 
[DEBUG] (s) testSourceDirectory = C:\Users\Ivar\workspace\anotherworkspace\newrestservice\complete\src\test\java 
[DEBUG] (s) threadCountClasses = 0 
[DEBUG] (s) threadCountMethods = 0 
[DEBUG] (s) threadCountSuites = 0 
[DEBUG] (s) trimStackTrace = true 
[DEBUG] (s) useFile = true 
[DEBUG] (s) useManifestOnlyJar = true 
[DEBUG] (s) useSystemClassLoader = true 
[DEBUG] (s) useUnlimitedThreads = false 
[DEBUG] (s) workingDirectory = C:\Users\Ivar\workspace\anotherworkspace\newrestservice\complete 
[DEBUG] (s) project = MavenProject: org.springframework:gs-rest-service:0.1.0 @ C:\Users\Ivar\workspace\anotherworkspace\newrestservice\complete\pom.xml 

そして、それはここに私のpom.xml

<?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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.springframework</groupId> 
    <artifactId>gs-rest-service</artifactId> 
    <version>0.1.0</version> 
    <packaging>war</packaging> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
     </dependency> 
     <!-- <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
      <scope>test</scope> 
     </dependency>--> 
     <dependency> 
      <groupId>org.jetbrains.kotlin</groupId> 
      <artifactId>kotlin-stdlib</artifactId> 
      <version>1.0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.4.1211</version><!--$NO-MVN-MAN-VER$ --> 
     </dependency> 
     <dependency> 
      <groupId>commons-dbutils</groupId> 
      <artifactId>commons-dbutils</artifactId> 
      <version>1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>1.4.191</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect --> 


    </dependencies> 

    <properties> 
     <java.version>1.8</java.version> 
    </properties> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <artifactId>kotlin-maven-plugin</artifactId> 
       <groupId>org.jetbrains.kotlin</groupId> 
       <version>1.0.3</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <configuration> 
          <sourceDirs> 
           <sourceDir>${project.basedir}/src/main/java</sourceDir> 
          </sourceDirs> 
         </configuration> 
        </execution> 
        <execution> 
         <id>test-compile</id> 
         <goals> 
          <goal>test-compile</goal> 
         </goals> 
         <configuration> 
          <sourceDirs> 
           <sourceDir>${project.basedir}/src/main/java</sourceDir> 
          </sourceDirs> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.5.1</version><!--$NO-MVN-MAN-VER$ --> 
       <executions> 
        <!-- Replacing default-compile as it is treated specially by maven --> 
        <execution> 
         <id>default-compile</id> 
         <phase>none</phase> 
        </execution> 
        <!-- Replacing default-testCompile as it is treated specially by maven --> 
        <execution> 
         <id>default-testCompile</id> 
         <phase>none</phase> 
        </execution> 
        <execution> 
         <id>java-compile</id> 
         <phase>compile</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>java-test-compile</id> 
         <phase>test-compile</phase> 
         <goals> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.19.1</version><!--$NO-MVN-MAN-VER$--> 
        <configuration> 
         <includes> 
          <include>**/Test*.kt</include> 
          <include>**/*Test.kt</include> 
          <include>**/*TestCase.kt</include> 
         </includes> 
        </configuration> 
       </plugin> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 
+0

Mavenのドキュメントでは、設定、使用方法、意味についてはよく分かりません。あなたは、Mavenのドキュメントが不足している典型的な例を打ちました。私の答えは問題を示しています... –

答えて

4

2つの問題があります(これは、EMを見つけることができません)

すべてのテストを実行しません:mvn test -Xを実行しているとき

は、今では言います、最初の号あなたが見つかりましたが、私はここで文書化します。

ので、あなたのテストはまったくコンパイルされていない src/main/javaディレクトリをコンパイルする代わりに src/test/java
<execution> 
     <id>test-compile</id> 
     <goals> 
      <goal>test-compile</goal> 
     </goals> 
     <configuration> 
      <sourceDirs> 
       <sourceDir>${project.basedir}/src/main/java</sourceDir> 
      </sourceDirs> 
     </configuration> 
</execution> 

:Kotlin-Mavenプラグインでは、などtest-compile目標の設定を持っています。次のようになります。

  <sourceDirs> 
       <sourceDir>${project.basedir}/src/test/java</sourceDir> 
      </sourceDirs> 

またはあなたのファイルがjavakotlinディレクトリの両方である場合:

  <sourceDirs> 
       <sourceDir>${project.basedir}/src/test/java</sourceDir> 
       <sourceDir>${project.basedir}/src/test/kotlin</sourceDir> 
      </sourceDirs> 

第二の問題は、あなたが最初のものを回避しようとしている可能性があります。そして表面上は上手く見えますが、Surefireプラグインの設定が間違っています。 Maven Surefireプラグインのドキュメントは、それほど正確ではありません(または、動作については完全ではありません)。 Surefireプラグインの設定を完全に削除すると、デフォルトですでに必要なことが行われているため、動作します。それとも、.classまたは.javaサフィックスに代わり.ktサフィックスを持つからincludeファイルパターンをリストから変更することができ、それらもKotlin、Clojureの、スカラ座、のために正常に動作します...

なぜ?ここでの話...

この構成である:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
      <configuration> 
       <includes> 
        <include>**/Test*.java</include> 
        <include>**/*Test.java</include> 
        <include>**/*TestCase.java</include> 
        <include>**/RandomName.java</include> 
       </includes> 
      </configuration> 
     </plugin> 

は、あなたはそれがないと思う何をしません。これは、実際に検索を行うことによってシュアに変換され、.class.javaに交換し、内部になる:

  <configuration> 
       <includes> 
        <include>**/Test*.class</include> 
        <include>**/*Test.class</include> 
        <include>**/*TestCase.class</include> 
        <include>**/RandomName.class</include> 
       </includes> 
      </configuration> 

しかし、あなたはこのハードコーディングされた魔法を破る.kt拡張子を使用している場合。 source code of Surefire pluginには、.javaで終わるファイルが.classで置き換えられています。 Ooopsは、ソースファイルとまったく関係なく、コンパイルされたクラスを探しています。

シュールファイアプラグイン2.19で、彼らはregex and also fully qualified classname patternsを持つ能力を追加しました。だから、あなたが使用しているプラ​​グインを決定する方法は、ファイル名拡張子.javaのようです。 .javaと表示されている場合、各ファイルは同じ名前のクラスになるので、ソースコードではなくパターンに一致するクラスを探します。ソースは、テストランナーではなくコンパイラープラグインによって既にコンパイルされています。それは、ソースコードを探しているビジネスはありません。

この設定は誤解を招き、実際にはクラス名を求めるのではなく、「魔法」を使ってクラス名を調べています。もちろん、サンプルとすべてが完全にソースファイルに関連していると信じています。そうではありません。

構成を使用せず、デフォルトの命名規則に従う方がよいです。

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
      <configuration> 
       <includes> 
        <include>Test*</include> 
        <include>*Test</include> 
        <include>*TestCase</include> 
        <include>RandomName</include> 
       </includes> 
      </configuration> 
     </plugin> 

今どのパッケージのものの名前で任意のクラスに比較している:あなたが何かを指定する必要がある場合や、includeの構成のより近代的な正規表現またはクラス名のバージョンを使用しています。

+0

これは問題ではないことが分かりました。問題はテストがコンパイルされていなかったことです(maven plugin compiler 'sourceDir')。あなたの(非常に詳細で説明的な)答えは私が問題を解決するのに役立ちましたので、私はそれを受け入れます! – Ivaro18

+0

@ Ivaro18をコンパイルした場合、 '* .kt'をインクルードすると実際に動作しますか?私はまだ失敗したと思う? –

+0

わかりません。sourceDirを追加する前にクラス名に変更しました – Ivaro18

関連する問題