如何将Spring集成到Cucumber中。

8
我目前正在尝试将Spring集成到我的Cucumber测试中。我有一个自定义的SpringFactory,如下所述:http://www.zsoltfabok.com/blog/2012/01/cucumber-jvm-di/,但代码没有被调用。最佳方法是什么来“连接”工厂和我的测试?(注:我的测试以Cucumber为主要运行器,即@RunWith(Cucumber.class),因此无法在此处使用SpringJUnit4ClassRunner。这在上面的链接中有描述,但没有说明如何读取cucumber.xml。我已经添加了一个新的SpringFactory,但它没有读取XML文件……)更新:实际上,通过添加以下内容,我已经取得了一些进展:
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-spring</artifactId>
        <version>1.0.0.RC15</version>
    </dependency>   

然而,我有一些@Autowired变量没有在Cucumber运行测试时被注入。

还有其他人遇到过这个问题吗?

4个回答

9
更新:cuke4duke项目已经过时,已被Cucumber-JVM取代。
我也遇到了同样的问题,根本原因是cucumber.xml未被cucumber-spring-1.1.5.jar中的SpringFactory读取。由于Spring DI失败而导致NPE无声失败。 自提交448以来,Cucumber SpringFactory不再加载cucumber.xml,您需要在所有步骤定义类中包含@ContextConfiguration("classpath*:cucumber.xml")

5
一次快速的“cucumber spring integration”谷歌搜索会带您到这里这里。如果您正在使用cuke4duke,那么这看起来是一个更简单的方法。
示例似乎表明,默认情况下,cuke4duke将从类路径的根目录加载cucumber.xml。这是一个Spring配置文件,必须包括用@StepDefinition注释的类的component-scan
您不需要提供SpringFactory,也不需要使用@RunWith注释,只需提供一些Spring配置和一个或多个jvm属性。

它奏效了!以下是一些额外的注意事项,这些注意事项让我的解决方案起作用:1. 不要使用 picocontainer 的 maven 依赖;2. 对于您的组件扫描,请在 Steps 类上使用更为最新的 @StepDefAnnotation。 - Reimeus

1

我刚看到了你的问题。很可能是缺少模块依赖。我已经更新了存储库,现在所有的依赖应该都没问题了(我正在使用ivy)。


-1
问题在于,某些版本的Spring只能与特定版本的Cucumber-Spring和Cucumber-JVM一起使用。找到获胜组合可能需要花费两天时间来调整jar版本。因此,从一个使用简单注入的“Hello World”BDD场景开始,您知道它可以工作,因为您需要调整这些jar直到您得到一个可用的环境。
最简单的方法是将最新版本的Spring与最新版本的Cucumber-Spring匹配。新版本的Spring得到了更好的支持。如果您不能简单地升级您的Spring,则使用描述不同版本的Cucumber-Spring和您正在使用的Spring版本之间的Maven依赖关系的网站。
如果您想坚持使用旧版的Spring(这是个坏主意,改变的痛苦只会越来越大),另一种策略是使用JBehave进行BDD测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接