当我们使用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对象?