JGiven Stage 中的@BeforeScenario 问题(支持 Spring)
@BeforeScenario issues in JGiven Stage (with Spring Support)
在 Spring 支持下享受使用 JGiven 的乐趣!
但是,我遇到了 @Autowired
在 Stage
class 中与 @BeforeScenario
打得很好的问题(用 @JGivenStage
注释)。我有一个最小 spring 配置 (读取几个 属性 文件,扫描组件等) 并用 @EnableJGiven
表示,即
@Configuration
@EnableJGiven
@PropertySource(ignoreResourceNotFound = true,
value = { "classpath:/config/qa.properties", "classpath:/config/env-${spring.profiles.active:}.properties" })
@ComponentScan(basePackages = { "com.mytest.qa.api", "com.mytest.stage", "com.mytest.qa.ui" })
public class SpringTestConfiguration {}
我很想创建一个 JGiven 场景,它有多种方法,但只在 Given
阶段设置 一次(因为它需要几分钟)。该功能例如MyFeatureTest
(为简洁起见已更改名称) 如下:-
@ContextConfiguration(classes = SpringTestConfiguration.class)
public MyFeatureTest extends SpringScenarioTest<MyGiven, MyWhen, MyThen> {
@Test
public void analysis_should_be_correct() {
given().I_am_at_the_home_page_with_example_dataset_analysed();
when().I_click_on_analysis();
then().I_expect_the_analysis_should_be_correct();
}
@Test
public void download_should_be_correct() {
given().I_am_at_the_home_page_with_example_dataset_analysed();
when().I_click_on_download();
then().I_expect_the_download_should_be_correct();
}
}
我的MyGiven
class如下:-
@JGivenStage
public MyGiven extends Stage<MyGiven> {
@Autowired
private QaApi qaApi; // QA API use to hit API directly e.g. for setup
@Autowired
private HomePage homePage;
public MyGiven I_am_at_the_home_page_with_example_dataset_analysed() {
homePage.visit().login(defaultUsername, defaultPassword);
return self();
}
@BeforeScenario
private void setupSingleAnalysedUpload() {
qaApi.uploadAndAnalyseExampleDataSet(); // !!!! qaApi is NULL !!!!
}
}
我想要实现的是,当我 运行 一个场景(或一个场景的几个测试)时,setup setupSingleAnalysedUpload()
方法只被调用一次(因为它非常慢) .
我的方法是用 @BeforeScenario
注释来注释这个方法。但是,protected QaApi qaApi;
为空 (未通过 @Autowired
注释初始化)。
Note - If I comment out the setupSingleAnalysedUpload
method and stick a breakpoint on homePage.visit().login
line then QaApi
is initialised without issue - assuming spring life-cycling issues with @BeforeScenario
annotation.
完全被踩了 - 我的直觉是 jgiven-spring 库中缺少功能?如果是这样,最佳实践是什么?
这应该在 v0.14.0
中得到解决
在 Spring 支持下享受使用 JGiven 的乐趣!
但是,我遇到了 @Autowired
在 Stage
class 中与 @BeforeScenario
打得很好的问题(用 @JGivenStage
注释)。我有一个最小 spring 配置 (读取几个 属性 文件,扫描组件等) 并用 @EnableJGiven
表示,即
@Configuration
@EnableJGiven
@PropertySource(ignoreResourceNotFound = true,
value = { "classpath:/config/qa.properties", "classpath:/config/env-${spring.profiles.active:}.properties" })
@ComponentScan(basePackages = { "com.mytest.qa.api", "com.mytest.stage", "com.mytest.qa.ui" })
public class SpringTestConfiguration {}
我很想创建一个 JGiven 场景,它有多种方法,但只在 Given
阶段设置 一次(因为它需要几分钟)。该功能例如MyFeatureTest
(为简洁起见已更改名称) 如下:-
@ContextConfiguration(classes = SpringTestConfiguration.class)
public MyFeatureTest extends SpringScenarioTest<MyGiven, MyWhen, MyThen> {
@Test
public void analysis_should_be_correct() {
given().I_am_at_the_home_page_with_example_dataset_analysed();
when().I_click_on_analysis();
then().I_expect_the_analysis_should_be_correct();
}
@Test
public void download_should_be_correct() {
given().I_am_at_the_home_page_with_example_dataset_analysed();
when().I_click_on_download();
then().I_expect_the_download_should_be_correct();
}
}
我的MyGiven
class如下:-
@JGivenStage
public MyGiven extends Stage<MyGiven> {
@Autowired
private QaApi qaApi; // QA API use to hit API directly e.g. for setup
@Autowired
private HomePage homePage;
public MyGiven I_am_at_the_home_page_with_example_dataset_analysed() {
homePage.visit().login(defaultUsername, defaultPassword);
return self();
}
@BeforeScenario
private void setupSingleAnalysedUpload() {
qaApi.uploadAndAnalyseExampleDataSet(); // !!!! qaApi is NULL !!!!
}
}
我想要实现的是,当我 运行 一个场景(或一个场景的几个测试)时,setup setupSingleAnalysedUpload()
方法只被调用一次(因为它非常慢) .
我的方法是用 @BeforeScenario
注释来注释这个方法。但是,protected QaApi qaApi;
为空 (未通过 @Autowired
注释初始化)。
Note - If I comment out the
setupSingleAnalysedUpload
method and stick a breakpoint onhomePage.visit().login
line thenQaApi
is initialised without issue - assuming spring life-cycling issues with@BeforeScenario
annotation.
完全被踩了 - 我的直觉是 jgiven-spring 库中缺少功能?如果是这样,最佳实践是什么?
这应该在 v0.14.0
中得到解决