java - 如何在 Cucumber 步骤实现中 @Autowire REST 服务类(Spring boot)?

标签 java rest spring-boot cucumber autowired

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

Project Structure

这是我的 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 将其识别为胶水。我认为发生了这种情况,但后来我收到一个异常,说我无法扩展步骤实现类或 Hook 。我从 StepImplementation 类中删除了扩展,并将注释放在那里。仍然出现空指针异常。这是步骤实现。现在:

@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() {

    }

最佳答案

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

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

关于java - 如何在 Cucumber 步骤实现中 @Autowire REST 服务类(Spring boot)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411551/

相关文章:

java - 部署到云后无法访问 MySQL 数据库 - CommunicationsException

java - 我需要一个使用 ssl 的 java stomp 客户端库

java - 如何一起使用 mapstruct 和 springboot bean? @autowired

java - 使用 RPC 服务的 GWT.create 的目的是什么?

ruby-on-rails - 嵌套或不嵌套资源

spring - 使用 RabbitMQ 的自定义目的地

node.js - 如何为移动和 AJAX 调用保护 JSON RESTful API?

java - 在 Spring Boot 中使用 MongoTemplate 检查 MongoDB 连接

java - Spring Boot 如何做查看 PDF

java - 所选目录不是 JDK 的有效主目录 - MacOS 上的 IntelliJ