Cucumber No Scope зарегистрирован для имени области действия «огуречный клей»

У меня ошибка No Scope registered for scope name 'cucumber-glue' при запуске тестов Cucumber (6.1.1) BDD с Spring

Мой файл конфигурации

@ContextConfiguration(locations = {"classpath:/application-context-bdd.xml"})
@CucumberContextConfiguration
public class Configuration {

}

Мой тестовый файл

@RunWith(Cucumber.class)
@CucumberOptions(plugin = {
        "json:target/cucumber-json-report.json" },
        glue = {"xx/java/bdd/configuration", "xx/java/bdd/stepdefs", "xx/java/bdd/steps"},
        features = "classpath:features",
        publish = false
)
public class TestBDD {
}

Файл контекста моего приложения, в котором объявлен мой bean-компонент cucumber-glue.

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   
    <bean name = "todoRepository" class = "xx.java.core.domain.mock.TodoRepositoryMock" scope = "cucumber-glue"/>

    <bean name = "todoService" class = "xx.java.core.domain.todolist.service.impl.TodoListServiceImpl">
        <constructor-arg ref = "todoRepository"/>
    </bean>

    <bean name = "todoStep" class = "xx.java.bdd.steps.TodoStep">
        <constructor-arg ref = "todoService"/>
    </bean>

    <bean class = "xxx.java.bdd.stepdefs.TodoStepDefinition"> <!-- Not needed since @M.P. Korstanje reply -->
        <constructor-arg ref = "todoStep"/>
    </bean>
</beans>

Есть идеи ??

0
0
34
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Правильная область действия — cucumber-glue, но она существует только тогда, когда активен сценарий. Определив bean-компонент в xml, он будет создан при запуске приложения до запуска любого сценария.

Однако вам не нужно определять TodoStepDefinition как bean. Огурец создаст его по мере необходимости.

https://github.com/cucumber/cucumber-jvm/tree/main/spring#sharing-state

Мои извинения за объем cucumbre-glue Я сделал эту ошибку, когда писал вопрос. Вы правы, StepDefintion вроде как не нужен. Я повторно отредактировал свой вопрос с более подробной информацией. у меня все еще есть ошибка

EE AA 18.03.2022 07:46
Ответ принят как подходящий

решение состоит в том, чтобы объявить все todoRepository зависимые компоненты в cucumber-glue области видимости

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   
    <bean name = "todoRepository" class = "xx.java.core.domain.mock.TodoRepositoryMock" scope = "cucumber-glue"/>

    <bean name = "todoService" class = "xx.java.core.domain.todolist.service.impl.TodoListServiceImpl" scope = "cucumber-glue">
        <constructor-arg ref = "todoRepository"/>
    </bean>

    <bean name = "todoStep" class = "xx.java.bdd.steps.TodoStep" scope = "cucumber-glue">
        <constructor-arg ref = "todoService"/>
    </bean>

</beans>

Другие вопросы по теме