【问题标题】:How to @Autowire a REST service class (Spring boot) in a Cucumber step implementation?如何在 Cucumber 步骤实现中 @Autowire REST 服务类(Spring boot)?
【发布时间】:2019-12-19 14:17:48
【问题描述】:

正如标题所说,我想在 Cucumber 中测试一个场景,我使用我的服务类的方法向数据库添加一个新的 DTO。问题是我不能使用@Autowire,也不知道如何启用它。我已经为类似的问题尝试了几种解决方案(Like this one),但我不知道我哪里出错了。作为参考,我在 Intellij 中执行此操作,这就是我的结构:

这是我的 Cucumber 入门课程:

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/unit/resources/features")
public class RunCucumberUnitTest {

}

这是所有步骤都将继承的 BaseStep 类:

@ContextConfiguration(classes = {BasicLoginTestApplication.class},
                      initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class BaseStep {
}

在我的步骤实现中,我尝试这样做:

public class UserServiceTestStepImplementation extends BaseStep{

    @Autowired
    UserService userService;

但我仍然得到 userService 的空指针异常。我真的很想知道我能做什么。

编辑:我尝试向 BaseStep 类添加一个虚拟方法,以使 Cucumber 将其识别为胶水。我认为发生了这种情况,但后来我遇到了一个异常,说我不能扩展步骤实现类或钩子。我从 StepImplementation 类中删除了扩展,并将注释放在那里。仍然得到空指针异常。这是步骤 impl。现在:

@ContextConfiguration(classes = {BasicLoginTestApplication.class},
    initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(webEnvironment =   SpringBootTest.WebEnvironment.DEFINED_PORT)
public class UserServiceTestStepImplementation /*extends BaseStep*/{

    @Autowired
    UserService userService;

    @Before
    public void springContext() {

    }

【问题讨论】:

    标签: java rest spring-boot cucumber autowired


    【解决方案1】:

    您可能需要将此代码添加到 BaseStep 类中

    @Before
    public void setup_cucumber_spring_context(){
        // Dummy method so cucumber will recognize this class as glue
        // and use its context configuration.
    }
    

    【讨论】:

    • 我认为这确实使它可以识别,但我使用的注释并没有解决问题(添加编辑)发布
    • 虚拟方法应该位于@SpringBootTest注解中请查看示例github.com/cucumber/cucumber-jvm/tree/master/examples/…
    • 正如您在我的帖子中看到的,虚拟方法位于带有@SpringBootTest 注释的类中。它仍然没有工作。非常感谢您提供的示例链接,我会尽量让它工作。
    • 我试过用这种方式设置 Spring Context,但还是不行。 @Autowired 仍然不起作用,并将 userService 保留为空。
    • 只是检查:你的依赖项中有黄瓜弹簧吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2019-01-08
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多