web-dev-qa-db-ja.com

Spring Bootアプリケーションのキュウリテスト

Gradleを介してSpring BootアプリケーションをテストするためにCucumberが使用されているサンプルアプリケーションをどこで見つけることができるか知っていますか? cmd行でサーバーを起動し、IDEを使用してテストを正常に実行できますが、CIサーバー上ですべてをプログラムで実行できる必要があります。私はここで答えを見ましたが、おそらく複数のステップ定義ファイルがあるため、その解決策は私にはうまくいきませんでした。

これが私のセットアップです

build.grade(他の質問で言及)

testCompile ("org.springframework.boot:spring-boot-starter-test",
    ...
    "info.cukes:cucumber-spring:${cucumberVersion}")

CucumberTest.Java

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty", features = "src/test/resources")
public class CucumberTest{
}

AbstractSpringTest.Java(すべてのStepDefファイルによって拡張)

@SpringApplicationConfiguration(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
@Ignore
public abstract class AbstractSpringTest
{ ... }

1.ステップ定義ファイルを初期化しようとしているため、2。アプリケーションが起動せず、キュウリのテストが接続を確立できないため、起動時に正しいことを行いません。

ありがとう。

編集:または誰かがgradleを使用してアプリケーションを開始および停止する方法を教えてくれれば、それも受け入れられます。

24
jakehschwartz

この質問 の助けを借りて問題を解決しました。

答えのあるリポジトリを次に示します。 https://github.com/jakehschwartz/spring-boot-cucumber-example

つまり、AbstractSpringTestクラスには次の注釈が必要です:@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DemoApplication.class, loader = SpringApplicationContextLoader.class) @WebAppConfiguration @IntegrationTest

13
jakehschwartz

同様の症状がありました。キュウリがSpringコンテキストを起動しませんでした...

次の依存関係(の1つ)を見逃していたことがわかりました。

build.gradle

testCompile "info.cukes:cucumber-junit:1.2.4"
testCompile "info.cukes:cucumber-Java:1.2.4"
testCompile "info.cukes:cucumber-spring:1.2.4"

StepDefs.Java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
        loader = SpringApplicationContextLoader.class,
        classes = Application.class
)
@WebIntegrationTest(randomPort = true)
public class StepDefs {

    @Value("${local.server.port}")
    int port;

}

更新:SpringBoot 1.5.1

@ContextConfiguration(
        loader = SpringBootContextLoader.class,
        classes = Application.class
)
6
Nick Grealy

@jakehschwartzに加えて、Webアプリをランダムに使用可能なポートで起動するには、AbstractSpringTestに次のものが必要です。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Application.class, loader = SpringApplicationContextLoader.class)
@WebIntegrationTest({"server.port=0"})
public abstract class AbstractSpringTest {

        @Value("${local.server.port}")
        protected int serverPort;
...}
1
Joe Stepowski

まず、gradleに applied spring-boot があることを確認する必要があります。呼び出しgradle build実行可能なjarを生成します。 Springクラスをメインとしてマニフェスト呼び出しを行う代わりに、スレッドでそれを開始するラッパーを用意します。 落ち着くのを待ちます を実行し、 Cucumber を実行します。

@RunWith(Cucumber.class)
public class LucasePsCucumberTest implements Runnable {
    public static void main(String[] args) {
        Thread t = new Thread(this);
        t.start();
        // wait for t
        cucumber.api.cli.Main(null);
     }
}
0
hd1

このようなことをして、SpringをJUnitパラメーター化テストで動作させました。 Cucumberでも同じ概念になるはずですが、試したことはありません。 XML構成を使用していたので、違いが生じる可能性があります。

RunWithSpringJUnit4

public abstract class RunWithSpringJUnit4 {

    private TestContextManager testContextManager;

    public RunWithSpringJUnit4() {
        try {
            this.testContextManager = new TestContextManager(getClass());
            this.testContextManager.prepareTestInstance(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

CucumberTest

@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty", features = "src/test/resources")
public class CucumberTest extends RunWithSpringJUnit4 {
}
0
LucasP