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を使用してアプリケーションを開始および停止する方法を教えてくれれば、それも受け入れられます。
この質問 の助けを借りて問題を解決しました。
答えのあるリポジトリを次に示します。 https://github.com/jakehschwartz/spring-boot-cucumber-example
つまり、AbstractSpringTest
クラスには次の注釈が必要です:@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DemoApplication.class, loader = SpringApplicationContextLoader.class) @WebAppConfiguration @IntegrationTest
同様の症状がありました。キュウリが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
)
@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;
...}
まず、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);
}
}
このようなことをして、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 {
}