如何使用 Cucumber runner 加载 Spring 应用程序上下文

Eug*_*e S 5 java junit spring automation cucumber

我的目标是运行 Cucumber 场景,同时使用 Spring 进行对象创建和连接。据我了解(来自一些 Cucumber 书籍),只要路径配置正确,Cucumber 运行程序就应该负责加载应用程序上下文。

例如,如果我有一个如下所示的运行器 Java 类:

@RunWith(Cucumber.class)
@CucumberOptions(features = {"classpath:xxx_features"}, 
                 glue = {"com.package.name"})

public class FunctionalDevIT {
}
Run Code Online (Sandbox Code Playgroud)

然后 Cucumber runner 将自动扫描并初始化它找到的所有 bean,这样我就不必手动加载应用程序上下文以及从上下文中一一获取 bean。

目前,为了理解这个概念,我创建了最基本的配置,其中包含三个 Java 类:

  1. 跑步者类别(如上所述)
  2. Beans 类 - 包含 Bean 的类

    @Component
    public class BeansClass {
    
        @Bean
        public void test1() {
            System.out.println("test1!");
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 主类 - 使用 Beans 类中定义的 beans 的类

    @ContextConfiguration("classpath:/cucumber.xml")
    public class MainClass {
    
        @Autowired
        private BeansClass testclass;
    
        @Before
        public void navigate() {
            testclass.test1();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

目前,这种方法对我来说不起作用,NullPointerException当我尝试调用testclass.test1()主类中的方法时,我得到了,这意味着上下文毕竟没有加载。

我是否缺少一些配置,或者我对它应该如何工作的整个理解是错误的?

PS我的所有文件目前都在同一个包中。

Eug*_*e S -2

我通过添加已用 和 注释的附加配置类解决了这个问题@ComponentScan@Configuration如下所示:

@ComponentScan
@Configuration
public class ConfigurationClass {
    . . . 
}
Run Code Online (Sandbox Code Playgroud)

ConfigurationClass然后我在主类中使用了这个类:

@ContextConfiguration(classes = WebDriverConfiguration.class)
public class MainClass {
    . . .
}
Run Code Online (Sandbox Code Playgroud)