2016-10-11 7 views
2

spring boot:runコマンドを使用してビルドおよびデプロイメント中にスプリングブートアプリケーションのユニットテストを実行するにはどうすればよいですか。スプリングブートはユニットテストを実行しません

私の期待は、アプリケーションを実行する前にすべての単体テストを実行することですが、以前はmvn testのような別のmavenコマンドを作成したくありません。

私の問題: 私は単純なスプリングブートアプリケーションを作ったので、intellijやコマンドラインからアプリケーションを実行している間に単体テストを実行する方法を見つけることができませんでした。まず、テストクラスの設定や間違った名前や、プロジェクトの構成が間違っていると思いました。だから私はintellijテンプレートから春のブートアプリケーションを作成しました。私の幸せにはすでにデフォルトテストが書かれているので、単にアプリケーションを実行します。不幸なテストは実行されませんでした。

これは、intellijによって作成されたプロジェクト構造、pom.xml、メインクラス、単体テストのスクリーンショットです。 Project created by intetelij

テストランナーを変更してテストに失敗し、もう一度試しました。同じ結果。 unit test changed to fail

私は http://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html

ここspring boot:runコマンドの下に隠されているものをググ私は、マニュアルの一番上に何か面白いものを見つけました:「前に自分自身を実行するライフサイクル相試験 - コンパイルの実行を起動します。」だから私の理解は、このコマンドはテストをコンパイルするだけですが、それらを実行しないということですか?もしそうなら、問題は - コマンドにフラグを追加して "テスト"段階を追加することは可能ですか?

よろしく、

ミハル

+1

完全に使用できないものを実現したいと考えています。生産的なコードは、もう一方のテストコードです。スプリングブートは、プロダクティブコードのみを使用します。通常は、ユニットテストを使用してビルド/デプロイメントプロセス中の生産性コードの正確性を検証します。なぜ、実稼働環境で単体テストを実行したいのですか?あなたは何かここで誤解されているかもしれません。 – Heri

+0

多分私は自分の問題をはっきりと述べなかったでしょう。私が探している唯一のことは、通常の春のブートアプリケーションを実行する前にユニットテストを実行することです。私のすべてのmavenプロジェクトでは、mvnをきれいにインストールし、アプリケーションをデプロイする前にテストを実行しました。今私は同じことをしたい。 私が知っている限り、 'spring boot:run'を使ってスプリングブートアプリケーションを実行すると、deploy前にすべてのプロジェクトが最初にコンパイルされます。アプリケーションをデプロイする前にユニットテストを実行する可能性はありますか?私は 'spring boot:run'の前に' mvn test'を走らせることができると知っていますが、私はそれを1つのコマンドで行うことができるのか不思議です:) – www

+1

'mvn test spring-boot:run'を実行するのを止めますか? IntelliJでは、それを実行するMaven実行設定を作成することができます。 – jny

答えて

4

ここにあなたの問題は、Mavenのライフサイクルで行うことです。 spring-boot:rundocsによれば、デフォルトでライフサイクルフェーズvalidateにバインドされ、実行前にフェーズtest-compileが呼び出されます。

は、アプリケーションを実行する前にテストをに実行することです。 POMのカスタムMavenプロファイルでこれを行うことができます - 次のようなものです。あなたのPOMでこれにより

<project> 
    <profiles> 
     <profile> 
      <id>test-then-run</id> 
      <build> 
       <defaultGoal>verify</defaultGoal> 
       <plugins> 
        <plugin> 
         <groupId>org.springframework.boot</groupId> 
         <artifactId>spring-boot-maven-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>spring-boot-run</id> 
           <phase>verify</phase> 
           <goals> 
            <goal>run</goal> 
           </goals> 
           <inherited>false</inherited> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
     ... 
    </profiles> 
... 
</project> 

、あなたがしてテストを実行してアプリを起動できます。

mvn -P test-then-run 

これは代わりにすることを意味しvalidate相のverify相にrun目標をバインドテストが最初に実行されます。ここでフェーズが実行される順序を確認できます。https://maven.apache.org/ref/3.3.9/maven-core/lifecycles.html

0

アプリケーションを実行する前にmvn testを使用できることが分かりました。実際、それはintellijの多くの方法によって達成することができます。 IntelliJの中

image

春のブート構成:私にとっては、私は、アプリケーションを起動する前に、MVNゴールテストを追加します。 もちろん、別の方法で行うこともできます。

私は何とかスプリングブートを操作できるかどうかは非常に興味がありました。同じ結果を得るにはいくつかのフラグやsthを使用してコマンドを実行しますが、不可能です。

オランバート、あなたの答えもありがとう、それは非常にうまくいきます。

+0

あなたが答えに満足していれば、すべての有益な回答をupvoteし、最良の答えを受け入れてください。 –

+0

unfortunatelly私のアップフォースを公に表示するのに十分な評判ポイントがありません。 :) – www

+0

実際には15人の担当者が必要です。 https://stackoverflow.com/help/whats-reputation いくつかの意味のある編集(タイプミス、タグ、フォーマットの修正)は、すぐに15の評判を得るでしょう: https://stackoverflow.com/help/whats-reputation 回答の質問はさらに良いです:) StackOverflowを使用して幸運を! –

関連する問題