web-dev-qa-db-ja.com

SpringBootTestアノテーションの使用

私はSpring Bootを使用してAPIを構築し、これまでにいくつかの単体テストを関連付けました。予想どおり、これらはローカルで実行され、Jenkinsがビルドサーバーで_gradle build_を介してプロジェクトをビルドするときに実行されます。実際にリクエストとレスポンスをテストできるように、残りの保証を使用してプロジェクトにいくつかの統合テストを追加しようとしていますが、プロジェクトに追加する方法が明確ではありません。

これまでのところ、src/testにintegrationTestsフォルダーを追加し、_gradle build_または_gradle test_を介して、残りのテストを除外するようにgradleに指示しました。 APIが現在実行されている限り正常に動作する統合テストをトリガーするように、gradleタスク_gradle integrationTest_を設定しました。

どうやら私はテストクラスに@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)の注釈を付けて、Springにテスト用の組み込みサーバーを自動的に起動するように指示することができますが、何も実行していないようで、テストは_Java.net.ConnectException_エラーで失敗します別のウィンドウでAPIを起動するまで。以下のサンプルコードに何か問題がありますか、それとも他に何か不足していますか?

_com.example.restassured;

import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

import static io.restassured.RestAssured.*;

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) 
public class RunSomeTestsIT {

    @Test public void url_should_return_200_response() {
       get("/v1/test/123456").then().statusCode(200);
    }

}
_

build.gradle

_task integrationTest(type: Test) {
    include 'com/example/restassured/**'
    // Run all tests each time. Do not cache.
    outputs.upToDateWhen { false } 
}
_
4
Matt Damon

偶然の一致で、私は 今日は非常に類似した何かに取り組んでいます であり、うまくいけば、いくつかの有用な指針を提供することができます。

このコード と比較すると、@RunWith(SpringRunner.class)アノテーションがないと思います!

編集:テストを「アプリケーション」クラスと同じパッケージに移動する以外に、Springアノテーションのすべてのブラックマジックを回避するSpringの「第一原理」アプローチを試すことができます。少なくとも、トラブルシューティングを改善し、何が起こっているかを制御できます。

https://github.com/ptrthomas/spring-testing/blob/master/src/test/Java/example/HelloE2ERestKarateTest.Java

4
Peter Thomas