我目前正在尝试将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>
但是,由于Cucumber正在运行测试,因此我没有注入@Autowired变量。
还有其他人有这个问题吗?
答案 0 :(得分:9)
更新:cuke4duke项目现已过时,已被Cucumber-JVM取代。
我也有同样的问题,根本原因是在royal-spring-1.1.5.jar中SpringFactory没有读取cucumber.xml。 Spring DI无声地失败导致NPE。
从submission 448开始,Cucumber SpringFactory不再加载cucumber.xml,您需要在所有步骤定义类中包含@ContextConfiguration("classpath*:cucumber.xml")
。
答案 1 :(得分:5)
谷歌快速搜索“黄瓜春天整合”给我here和here。如果您使用的是cuke4duke
,这看起来就像是一种更简单的方法。
该示例似乎表明,默认情况下,cuke4duke
将从类路径的基础加载cucumber.xml
。这是一个Spring配置文件,对于使用component-scan
注释的类,必须包含@StepDefinition
。
您不需要提供SpringFactory
,您不需要使用@RunWith
注释,只需提供一些Spring配置和一个或多个jvm属性。
答案 2 :(得分:1)
我刚看到你的问题。很可能缺少cucumber-spring
模块依赖项。我已经更新了存储库,现在所有依赖项都应该没问题(我正在使用常春藤)。
答案 3 :(得分:-1)
问题是某些版本的Spring仅适用于某些版本的Cucumber-Spring和Cucumber-JVM。寻找获胜组合可能需要两天时间摆弄jar版本。所以从&#34; Hello World&#34;开始使用您知道的简单注入的BDD场景将起作用,因为您需要调整这些罐子,直到您获得有效的环境。
最简单的方法是将最新版本的Spring与最新版本的Cucumber-Spring相匹配。 Spring的新版本得到了更好的支持。如果你不能简单地升级你的spring,那么使用描述不同版本的Cucumber-Spring和你正在使用的Spring版本之间的maven依赖关系的网站。
如果你想坚持你的旧版Spring(糟糕的想法,改变的痛苦只会变得更糟)另一种策略是使用JBehave进行BDD测试。