如何解决模拟JdbcTemplate bean
我正在使用Kotlin语言开发Spring Boot应用程序。 我最近尝试将Spring Boot的版本从2.2.4.RELEASE更新到2.3.3.RELEASE。
此更新提供了一些重大更改。这是我正在处理的那个:https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#jdbc.dialects。
我的测试之一是模拟jdbcTemplate Bean:
class MyTestClass {
@MockBean
lateinit var jdbcTemplate: JdbcTemplate
@Test
fun aTest() {
// do something with jdbcTemplate
}
}
一旦我将Spring Boot更新到新版本,并尝试运行此测试,ApplicationContext将无法加载,因为我的一个Repository Bean(该测试类未涉及的 )无法加载。创建。 stacktrace显示以下内容:
...
Caused by: org.springframework.data.jdbc.repository.config.DialectResolver$NoDialectException: Cannot determine a dialect for jdbcTemplate bean. Please provide a Dialect.
at org.springframework.data.jdbc.repository.config.DialectResolver.lambda$getDialect$2(DialectResolver.java:80)
at java.util.Optional.orElseThrow(Optional.java:290)
at org.springframework.data.jdbc.repository.config.DialectResolver.getDialect(DialectResolver.java:79)
at org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration.jdbcDialect(AbstractJdbcConfiguration.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 135 more
换句话说,DialectResolver无法检测到org.springframework.data.Repository实现所依赖的JdbcTemplate bean的方言(并且据我所知,这是因为模拟的JdbcTemplate绑定到空的DataSource)。
我的存储库如下:
@org.springframework.stereotype.Repository
interface MyRepository : Repository<MyEntityModel,Long> {
@Query(
value = """select * from mytable"""
)
fun someMethod(): List<MyEntityModel>
}
我的问题是: 我如何避免这种错误并且仍然能够模拟jdbctemplate的响应? 我的项目结构可能有问题吗?在测试类上使用@MockBean应该将其破坏是很奇怪的,因为与测试无关的存储库会受到影响。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。