java 如何防止Sping Boot 应用程序在测试期间示例化JDBC数据源?

l5tcr1uw  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(139)

我最近将JPA添加到我的应用程序中,以处理单个数据库请求。从那时起,测试失败了:java.lang.IllegalStateException: Failed to load ApplicationContext
[...]
Error creating bean with name 'dataSourceScriptDatabaseInitializer'
我在这里的理解是,在测试运行期间,Sping Boot 会尝试初始化数据库连接,但我对添加的db请求不感兴趣。我如何才能停止这种行为?

xqkwcwgp

xqkwcwgp1#

你得到这个错误是因为你可能滥用@SpringBootTest来测试服务,使用@MockBean来注入/创建依赖项/存储库的模拟。@SpringBootTest主要用于为整个应用程序编写集成测试,而不是测试单个服务。
简短的回答是不要。要么使用一个切片测试,要么只编写一个简单的单元测试(自己示例化服务,使用Mockito创建模拟,然后注入,不要滥用@SpringBootTest)。
如果您真的想继续这种方式,最简单的解决方案是添加H2作为测试依赖项,这样您就可以在运行测试时为您创建一个内存数据库。你不使用它,但它需要启动应用程序。
另一种选择是在@TestConfiguration中模拟DataSource。问题是,你需要模拟大量的方法和类,你基本上模拟得太多了,以至于你模拟了一个数据源实现的存根。

相关问题