簡體   English   中英

Cucumber 測試 Spring Boot 應用程序

[英]Cucumber Test a Spring Boot Application

有誰知道在哪里可以找到使用 Cucumber 通過 Gradle 測試 Spring Boot 應用程序的示例應用程序? 我可以在 cmd 行上啟動服務器並使用我的 IDE 運行測試,但我需要能夠在 CI 服務器上以編程方式運行它們。 我在這里看到了答案,但該解決方案對我不起作用,很可能是因為我有多個步驟 def 文件。

這是我的設置

build.grade(在另一個問題中提到)

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

黃瓜測試.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. 嘗試初始化我的 step def 文件和 2. 我的應用程序未啟動並且黃瓜測試無法建立連接。

謝謝。

編輯:或者如果有人可以告訴我如何使用 gradle 啟動和停止應用程序,那也是可以接受的。

我已經在這個問題的幫助下解決了這個問題

這是帶有答案的存儲庫: https : //github.com/jakehschwartz/spring-boot-cucumber-example

總之, AbstractSpringTest類需要有以下注解:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = DemoApplication.class, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest

我有類似的症狀,我的黃瓜不會啟動 Spring 上下文......

結果我錯過了以下依賴項(之一):

構建.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"

步驟定義文件

@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,如果您希望網絡應用程序在隨機可用端口上啟動,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;
...}

我做了這樣的事情來讓 Spring 與 JUnit 參數化測試一起工作。 黃瓜應該是相同的概念,但我還沒有嘗試過。 我使用的是 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();
        }
    }
}

黃瓜測試

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

首先,您需要確保已在 gradle 中應用了 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);
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM