Огурец PicoContainer не выглядит как спасение государства - PullRequest
0 голосов
/ 18 октября 2018

Я продолжаю получать исключения нулевых указателей при попытке получить доступ к переменной-члену в общем классе 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...