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

时间:2015-10-11 15:15:04

标签: java spring junit automation cucumber

我的目标是在使用Spring进行对象创建和连线时运行Cucumber方案。据我所知(从一些Cucumber书籍中),只要路径配置正确,Cucumber跑步者应负责加载应用程序上下文。

例如,如果我有一个类似于此的跑步者Java类:

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

public class FunctionalDevIT {
}

然后Cucumber runner将自动扫描并初始化它将找到的所有bean,因此我不会必须手动加载应用程序上下文以及获取bean一个来自上下文。

目前,为了理解这个概念,我创建了一个由三个Java类组成的最基本的配置:

  1. Runner类(如上所述)
  2. Beans Class - 包含bean的类

    @Component
    public class BeansClass {
    
        @Bean
        public void test1() {
            System.out.println("test1!");
        }
    }
    
  3. 主类 - 使用Bean类

    中定义的bean的类
    @ContextConfiguration("classpath:/cucumber.xml")
    public class MainClass {
    
        @Autowired
        private BeansClass testclass;
    
        @Before
        public void navigate() {
            testclass.test1();
        }
    }
    
  4. 目前这种方法对我不起作用,当我尝试在Main Class中调用NullPointerException方法时,我得到了testclass.test1(),这意味着毕竟没有加载上下文

    我是否错过了一些配置,或者我对该如何工作的整体理解是错误的?

    P.S。我的所有文件目前都在同一个软件包中。

1 个答案:

答案 0 :(得分:0)

我通过添加和使用@ComponentScan@Configuration注释的其他配置类解决了这个问题,所以像这样:

@ComponentScan
@Configuration
public class ConfigurationClass {
    . . . 
}

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

@ContextConfiguration(classes = WebDriverConfiguration.class)
public class MainClass {
    . . .
}