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) 个答案