如何使用 Cucumber runner 加载 Spring 应用程序上下文
How to load Spring application context with Cucumber runner
我的目标是 运行 Cucumber 场景,同时使用 Spring 进行对象创建和连接。据我所知(来自一些 Cucumber 书籍),只要路径配置正确,Cucumber runner 就应该负责加载应用程序上下文。
例如,如果我有一个跑步者 Java class 看起来像这样:
@RunWith(Cucumber.class)
@CucumberOptions(features = {"classpath:xxx_features"},
glue = {"com.package.name"})
public class FunctionalDevIT {
}
然后 Cucumber runner 将自动 扫描并初始化它将找到的所有 bean,因此我 将 不必加载应用程序手动上下文以及从上下文中一个一个地获取bean。
目前,为了理解这个概念,我创建了一个最基本的配置,其中包含三个 Java classes:
- 亚军class(如上所述)
Beans Class - 包含 beans
的 class
@Component
public class BeansClass {
@Bean
public void test1() {
System.out.println("test1!");
}
}
Main class - 使用 Beans Class
中定义的 bean 的 class
@ContextConfiguration("classpath:/cucumber.xml")
public class MainClass {
@Autowired
private BeansClass testclass;
@Before
public void navigate() {
testclass.test1();
}
}
目前这种方法对我不起作用,当我尝试调用 Main Class 中的 testclass.test1()
方法时,我得到了 NullPointerException
,这意味着上下文毕竟没有加载。
我是否遗漏了某些配置,或者我对它应该如何工作的全部理解是错误的?
P.S. 我所有的文件目前都在同一个包里。
我通过添加和附加配置 class 解决了这个问题,该配置已用 @ComponentScan
和 @Configuration
注释,所以像这样:
@ComponentScan
@Configuration
public class ConfigurationClass {
. . .
}
然后我在 ConfigurationClass
中主要使用了这个 class class:
@ContextConfiguration(classes = WebDriverConfiguration.class)
public class MainClass {
. . .
}
我的目标是 运行 Cucumber 场景,同时使用 Spring 进行对象创建和连接。据我所知(来自一些 Cucumber 书籍),只要路径配置正确,Cucumber runner 就应该负责加载应用程序上下文。
例如,如果我有一个跑步者 Java class 看起来像这样:
@RunWith(Cucumber.class)
@CucumberOptions(features = {"classpath:xxx_features"},
glue = {"com.package.name"})
public class FunctionalDevIT {
}
然后 Cucumber runner 将自动 扫描并初始化它将找到的所有 bean,因此我 将 不必加载应用程序手动上下文以及从上下文中一个一个地获取bean。
目前,为了理解这个概念,我创建了一个最基本的配置,其中包含三个 Java classes:
- 亚军class(如上所述)
Beans Class - 包含 beans
的 class@Component public class BeansClass { @Bean public void test1() { System.out.println("test1!"); } }
Main class - 使用 Beans Class
中定义的 bean 的 class@ContextConfiguration("classpath:/cucumber.xml") public class MainClass { @Autowired private BeansClass testclass; @Before public void navigate() { testclass.test1(); } }
目前这种方法对我不起作用,当我尝试调用 Main Class 中的 testclass.test1()
方法时,我得到了 NullPointerException
,这意味着上下文毕竟没有加载。
我是否遗漏了某些配置,或者我对它应该如何工作的全部理解是错误的?
P.S. 我所有的文件目前都在同一个包里。
我通过添加和附加配置 class 解决了这个问题,该配置已用 @ComponentScan
和 @Configuration
注释,所以像这样:
@ComponentScan
@Configuration
public class ConfigurationClass {
. . .
}
然后我在 ConfigurationClass
中主要使用了这个 class class:
@ContextConfiguration(classes = WebDriverConfiguration.class)
public class MainClass {
. . .
}