我正在尝试将Cucumber-JVM与WireMock集成,但我一直遇到问题
java.net.ConnectException: Connection refused: connect
我尝试了几个教程,包括cucumber.io的官方文档,还尝试了以下内容:
我的Gradle依赖项:
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'io.cucumber:cucumber-java:6.2.2'
testImplementation 'io.cucumber:cucumber-junit:6.2.2'
testImplementation 'io.rest-assured:spring-web-test-client:4.3.1'
testCompile "com.github.tomakehurst:wiremock-jre8:2.27.0"
compile group: 'io.cucumber', name: 'cucumber-spring', version: '6.4.0'
基本思路是模拟服务器响应,这样将来我就能够在多个微服务之间创建一些集成测试。 这个想法来自我正在阅读的一本书 Java Cucumber 书籍 如果有更好的测试微服务的方法,我会接受新的想法。
我有一个测试类和我的步骤定义,从属性文件中获取端口信息。如下所示:
@SpringBootTest
@CucumberContextConfiguration
public class ConnectionWithCucumber {
@Value("${another.server.port}")
private int PORT;
@Rule
private WireMockRule wireMockRule = new WireMockRule(PORT);
private String messageResult;
@Given("I want to read a message")
public void iWantToRead() {
createMessageStub();
}
@When("I send the request")
public void iSendTheRequest() {
messageResult = given().get("localhost:8082/message").getBody().asString();
}
@Then("I should be able to read the word {string}")
public void iShouldBeAbleToReadTheWord(String arg0) {
assertEquals(arg0, messageResult);
}
private void createMessageStub() {
wireMockRule.stubFor(get(urlEqualTo("/message"))
.withHeader("Accept", equalTo("application/json"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("message")));
}
}
我还创建了一个可运行示例的代码库。
如果在查看代码库时找不到README文件,您可以使用以下方式运行该项目:
./gradlew cucumber
或者如果您使用的是Windows:
gradle cucumber
在我解决了这个问题后,我重构了代码,并将示例留在了我上面链接的存储库中。如果您遇到同样的问题,请查看它。