gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:11:06 24 4
gpt4 key购买 nike

就像标题所说,我想在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com