9

我正在使用 spring boot,因为它消除了所有无聊的东西,让我专注于我的代码,但是所有测试示例都使用 junit,我想使用 cucumber?

有人能指出我正确的方向,让黄瓜和弹簧启动,做所有的自动配置和连线,让我的步骤定义使用自动连线的 bean 来做事吗?

4

4 回答 4

17

尝试在您的步骤定义类中使用以下内容:

@ContextConfiguration(classes = YourBootApplication.class, 
                      loader = SpringApplicationContextLoader.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MySteps {
    //...
}

还要确保你的类路径中有 cucumber-spring 模块。

于 2014-04-16T09:57:57.497 回答
2

Jake - 我的最终代码在每个黄瓜步骤定义类扩展的超类中具有以下注释,这提供了对基于 Web 的模拟的访问,添加了各种测试范围,并且仅引导 Spring 启动一次。

@ContextConfiguration(classes = {MySpringConfiguration.class}, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@TestExecutionListeners({WebContextTestExecutionListener.class,ServletTestExecutionListener.class})

其中 WebContextTestExecutionListener 是:

public class WebContextTestExecutionListener extends
        AbstractTestExecutionListener {

    @Override
    public void prepareTestInstance(TestContext testContext) throws Exception {

        if (testContext.getApplicationContext() instanceof GenericApplicationContext) {
            GenericApplicationContext context = (GenericApplicationContext) testContext.getApplicationContext();
            ConfigurableListableBeanFactory beanFactory = context
                    .getBeanFactory();
            Scope requestScope = new RequestScope();
            beanFactory.registerScope("request", requestScope);
            Scope sessionScope = new SessionScope();
            beanFactory.registerScope("session", sessionScope);
        }
    }
}
于 2015-06-09T09:27:34.023 回答
1

我的方法很简单。在一个Before钩子中(在env.groovy我使用 Cucumber-JVM for Groovy 时),执行以下操作。

package com.example.hooks

import static cucumber.api.groovy.Hooks.Before
import static org.springframework.boot.SpringApplication.exit
import static org.springframework.boot.SpringApplication.run

def context

Before {
    if (!context) {
        context = run Application

        context.addShutdownHook {
            exit context
        }
    }
}
于 2017-05-25T15:49:59.600 回答
0

感谢@PaulNUK,我找到了一组可以使用的注释。

我在这里发布了我的问题中的答案

我的 StepDefs 类需要注释: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DemoApplication.class, loader = SpringApplicationContextLoader.class) @WebAppConfiguration @IntegrationTest

在我链接的答案中还有一个包含源代码的存储库。

于 2015-06-15T14:27:35.503 回答