使用黄瓜的Spring集成测试不会在步骤定义之间共享状态

时间:2017-09-25 16:56:24

标签: java spring spring-boot spring-test cucumber-java

当我们使用Guice进行集成测试时,我们可以使用@ScenarioScoped注释使对象在给定方案的整个生命周期中可共享。 使用Cucumber进行Spring集成测试是否可以实现相同的目标?

如下例所示: PS:这不是我的真实代码所以请避免关于质量的评论等。

Scenario: Status endpoint replies OK
  When I call the status endpoint
  Then response status code is 200
  And response body contains 'OK'

步骤定义类如下所示:

public class StatusStepDef extends MyAbstractSpringTest {
   @Autowired private MyHttpClient httpClient;

   @When("^I call the status endpoint$")
   public void callStatusEndpoint() {
       httpClient.callStatusEndpoint();
   }
}

public class HttpCommonsStepDef extends MyAbstractSpringTest {
   @Autowired private MyHttpClient httpClient;

   @Then("^response status code is 200$")
   public void responseStatusIsOK() {
     assertThat(httpClient.getLastResponse().getStatusCode().is2xxSuccessful()).isTrue();
   }

   @Then("^response body contains '(.+)'$")
   public void responseBodyContains(String bodyText) {
     assertThat(httpClient.getLastResponse().getBody()).isEqualTo(text);
   }

}

因此,我将在HttpCommonsStepDef类中获取一个NPE,因为Spring会注入一个新的MyHttpClient实例,使最后一个响应属性为null,而不是保持与StatusStepDef相同的那个。因此,我的问题是:我如何在给定方案的步骤定义中共享HttpClient对象?

0 个答案:

没有答案