Огурец и мокито - невозможно инициализировать макеты - PullRequest
1 голос
/ 27 марта 2020

Я использую mockito вместе с огурцом, где mock и stepdefinitions определены вместе в одном классе, который работает нормально. Теперь я * wi sh реорганизую свой код в более мелкие классы определений шагов и, скорее, получу доступ к моим макетам через помощников stati c из каждого класса stepDefinition. Моя проблема в том, что я не могу инициализировать мои макеты, когда они отделены от моих классов stepDefinitions.

Модули:

cucumber-junit 4.8.0
cucumber-java 4.8.0
mockito-core 3.3.3

I sh сделать что-то вроде этого:

@RunWith(Cucumber.class)
@CucumberOptions(
        plugin = {"pretty", "html:target/cucumber"},
        features = {"src/test/resources/features"},
        glue = {"bdd.steps"},
        monochrome = true)
public class RunCucumberTest {
}


public class MockDataHelper{
  @Mock private BookService bookService;

  @Getter
  private static Library library;

  @Before
  public void before() {
        MockitoAnnotations.initMocks(this);
        library = new Library(bookService);
  }

package bdd.steps;
public class StepsA {
  @Given("..") {
   ...
  @When("..") {
    MockDataWrapper.getLibrary().rentBook(..);
}

package bdd.steps;
public class StepsB {
  @Given("..")
   ...
}

I мог добиться того, чего я хочу, с помощью заводского метода, но надеялся на более элегантное решение ..

public Library getLibrary(){
    if(library == null){
        library = new Library(mock(bookService.class));
    }
    return library;
}

Любая помощь очень ценится

1 Ответ

1 голос
/ 28 марта 2020

Cucumber поддерживает различные контейнеры для инъекций зависимости. Если вы добавите cucumber-pico в качестве зависимости, все, что вам нужно сделать, это объявить конструктор. Поскольку вы используете Lombok, это вопрос добавления @RequiredArgConstructor.

@RequiredArgConstructor
public class StepsA {

  private final MockDataWrapper wrapper

  @When("..") {
    wrapper.getLibrary().rentBook(..);
  }

}

Убедитесь, что MockDataHelper находится на пути клея. В противном случае @Before крючок не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...