gpt4 book ai didi

java - 如何对 Spring @Bean CommandLineRunner 进行单元测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:15 26 4
gpt4 key购买 nike

我在一个小的 PoC 中使用 Spring Boot,我正在尝试测试一个 @Bean 实现。我有这段代码:

@SpringBootApplication
public class Application {

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

@Bean
CommandLineRunner init(@Value("${db.resetAndLoadOnStartup:true}") boolean resetAndLoadOnStartup,
SequenceIdRepository sequenceRepository,
UserAccountRepository userAccountRepository,
BookRepository bookRepository) {
return args -> {
log.info("Init Application...");
if (resetAndLoadOnStartup) {
fillDBData(sequenceRepository, userAccountRepository, bookRepository);
}
log.info("Aplication initiated!");
};
}

private void fillDBData(SequenceIdRepository sequenceRepository,
UserAccountRepository userAccountRepository,
BookRepository bookRepository) {
// Some code...
}
...
}

如何对这个@Bean commandLineRunner 进行单元测试?是的,也许我可以对“fillDBData”方法进行单元测试(设置 protected 或使用 powermock),但我想了解是否有一种方法可以“完全”测试 Spring @Bean。

最佳答案

以下是您如何使用集成测试进行测试。

@RunWith(SpringJUnit4ClassRunner.class)
// Or create a test version of Application.class that stubs out services used by the CommandLineRunner
@SpringApplicationConfiguration(classes = Application.class)
public class CommandLineRunnerIntegrationTest {

@Autowired
private CommandLineRunner clr;

@Test
public void thatCommandLineRunnerDoesStuff() throws Exception {
this.clr.run();
// verify changes...
}

}

话虽如此,我的偏好是创建一个命名服务来实现命令行运行器,然后在模拟所有依赖项的情况下对其进行单元测试。在我看来,测试 Spring 是否会在应用程序加载时调用 CommandLineRunner bean 并不重要,但 CommandLineRunner 实现是否会适本地调用其他服务。

关于java - 如何对 Spring @Bean CommandLineRunner 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29558906/

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