模拟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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...