У меня ошибка 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>
Есть идеи ??
Правильная область действия — cucumber-glue
, но она существует только тогда, когда активен сценарий. Определив bean-компонент в xml
, он будет создан при запуске приложения до запуска любого сценария.
Однако вам не нужно определять TodoStepDefinition
как bean. Огурец создаст его по мере необходимости.
https://github.com/cucumber/cucumber-jvm/tree/main/spring#sharing-state
решение состоит в том, чтобы объявить все 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>
Мои извинения за объем
cucumbre-glue
Я сделал эту ошибку, когда писал вопрос. Вы правы, StepDefintion вроде как не нужен. Я повторно отредактировал свой вопрос с более подробной информацией. у меня все еще есть ошибка