Я продолжаю получать исключения нулевых указателей при попытке получить доступ к переменной-члену в общем классе World, и после отладки это выглядит так, потому что 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 завершается, я так понимаю, что весь объект примера уничтожается, и все запускается снова для сценария 2. Но когда я пытаюсь получить доступ к this.world.randomString
, значение равно нулю.Это означает, что объект SharedWorld на самом деле не сохранил это значение из выполнения сценария 1.
Когда я добавляю оператор печати в конструктор
public Example(SharedWorld world) {
System.out.println("INJECTED WORLD IS: " + world);
this.world = world;
}
Я получаю это в первый раз:
SharedWorld@4b3ed2f0
А потом второй раз:
SharedWorld@cdc3aae
Что дает?Я думал, что весь смысл пико-контейнера заключается в том, чтобы внедрить один и тот же объект, чтобы сохранить переменные экземпляра.Но если он каждый раз вводит другой объект, я теряю переменную randomString
, которую я сохранил в Сценарии 1. Я действительно потерян здесь.
Вот соответствующий фрагмент моего 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>