gpt4 book ai didi

java - 测试 Spring Boot 命令行应用程序

转载 作者:行者123 更新时间:2023-12-01 18:35:24 26 4
gpt4 key购买 nike

我想测试我的 Spring Boot 命令行应用程序。我想模拟某些 bean(我可以通过在测试类顶部注释 @ContextConfiguration(classes = TestConfig.class) 来做到这一点。在 TestConfig.class,我覆盖了我想要模拟的 bean。我希望 Spring Boot 找到其余的组件。这似乎有效。

问题是,当我运行测试时,整个应用程序正常启动(即调用 run() 方法)。

@Component
public class MyRunner implements CommandLineRunner {

//fields

@Autowired
public MyRunner(Bean1 bean1, Bean2 bean2) {
// constructor code
}

@Override
public void run(String... args) throws Exception {
// run method implementation
}

我尝试覆盖 MyRunner @Bean 并将其放入 TestConfig.class 中,但这似乎不起作用。我知道我正在加载常规应用程序上下文,但这就是我想要做的(我认为?),因为我想重新使用所有(或大部分)@Component我在我的应用程序中创建了,并且只模拟了一个很小的子集。

有什么建议吗?

编辑:

Application.java

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

最佳答案

答案比我想象的要简单。在

中添加MockBean
@TestConfiguration
public class TestConfig {

@MockBean
private MyRunner myRunner;

}

我们可以使用 @MockBean 将模拟对象添加到 Spring 应用程序上下文中。模拟将替换应用程序上下文中相同类型的任何现有 bean。

因此,MyRunner.run() 从未被调用,但我仍然可以使用应用程序中的所有其他 bean。

关于java - 测试 Spring Boot 命令行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60067528/

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