【问题标题】:How to load Spring application context with Cucumber runner如何使用 Cucumber runner 加载 Spring 应用程序上下文
【发布时间】:2016-01-09 01:45:40
【问题描述】:

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

例如,如果我有一个如下所示的运行器 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. 主类 - 使用 Beans 类中定义的 bean 的类

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

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

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

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

【问题讨论】:

    标签: java spring junit automation cucumber


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2021-06-23
      • 2016-02-18
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多