有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Cucumber依赖项注入@Scope(“cucumberglue”)未注册

问题:我正在尝试为我的cucumber并行测试的每个场景确定一次多个类的作用域,因为这3个对象所管理的数据正在泄漏到后续场景中,所以现在我的数据受到了污染

首先,我使用以下依赖项配置spring:

春季版本:4.3.16。释放, 黄瓜版本:2.4.0

  <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.sql2o/sql2o -->
        <dependency>
            <groupId>org.sql2o</groupId>
            <artifactId>sql2o</artifactId>
            <version>${sql20.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>${cucumber.version}</version>
        </dependency>

我的世界相对简单,所有场景数据都驻留在这些服务中,世界看起来是这样的:

@Slf4j
public class CucumberWorld {

    @Autowired
    private DataBaseHelper databaseHelper;

    @Autowired
    private Driver driver;

    @Autowired @Getter
    private FolderDataService folderDataService;

    @Autowired @Getter
    private UserDataService userDataService;

    @Autowired @Getter
    private AccountDataService accountDataService;

需要注意的是,我有一个Driver对象,它是一个bean和一个singleton。我有各种各样的PageObjects,它们都是单态的。2-3个时间点上的My Page对象包含这些服务的@Autowired实例变量,例如:

@Slf4j
public class LoginPage extends AbstractBasePageObject {

    @Getter
    @Autowired
    private CookieModalComponent cookieModal;
    @Getter
    @Autowired
    private RegistrationModalComponent registrationModal;
    @Getter
    @Autowired
    private PrivacyNoticeModalComponent privacyModal;
    @Autowired
    AccountDataService accountDataService;

Driver+PageObjects应该是单例的,并且在整个测试生命周期中都是持续的,对于每个场景,这些服务都会被重置

当我像这样构建bean时:

@Bean
@Scope("cucumber-world")
public AccountDataService accountDataService() {
return new AccountDataService();
}

我收到以下消息:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'world': Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: No Scope registered for scope name 'cucumber-world'
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 29 more
Caused by: java.lang.IllegalStateException: No Scope registered for scope name 'cucumber-world'
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:343)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
    ... 40 more

这是我的spring配置类:

@Configuration
@Slf4j
public class ProductSpringConfiguration extends SpringConfig {

    @Bean
    public FolderDataService folderDataService() {
        return new FolderDataService();
    }

    @Bean
    public AccountDataService accountDataService() {
        return new AccountDataService();
    }

@Bean
public LoginPage loginPage() {
    return new LoginPage(driver());
}

驱动程序bean和父spring配置类都是从一个公共依赖项继承的,驱动程序bean是一个简单的单例,如下所示:

@Bean
public Driver driver() {
 return new Driver();
}

共 (0) 个答案