当尝试访问共享World类中的成员变量时,我不断收到nullpointer异常,并且在调试时看起来像是因为picocontainer没有注入共享类的同一对象。
我的目标是将要由其他步骤使用的对象的状态保存在我的黄瓜特征文件中。例如,我的功能文件如下:
Scenario: Scenario 1
Given I have a "random string"
Scenario: Scenario 2
Given I have the random string from scenario 1
我有一个共享的世界级课程:
public class SharedWorld {
public String randomString;
}
然后我有一个Java类来处理这两种情况:
public class Example {
private SharedWorld world;
public Example(SharedWorld world) {
this.world = world;
}
/* -------- Scenario 1 -------- */
@Given("^I have a "([^"]*)"$")
public void generateRandomString(String arg1) {
this.world.randomString = arg1;
}
/* -------- Scenario 2 -------- */
@Given("^I have the random string from scenario 1$")
public void printScenarioOneString() {
System.out.println("String is: " + this.world.randomString);
}
方案1完成后,据我了解,这是对整个Example对象的破坏,方案2的所有操作再次开始。但是,当我尝试访问this.world.randomString
时,该值为null。这意味着SharedWorld对象并没有真正保存场景1中的值。
当我在构造函数中添加打印语句时
public Example(SharedWorld world) {
System.out.println("INJECTED WORLD IS: " + world);
this.world = world;
}
我第一次得到这个:
SharedWorld@4b3ed2f0
然后第二次:
SharedWorld@cdc3aae
有什么作用?我认为pico容器的重点是注入相同的对象,以便可以保留实例变量。但是,如果每次都注入一个不同的对象,我将丢失在方案1中保存的randomString
变量。我在这里真的很迷失。
这是我pom的相关片段:
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>