在 kotlin 的 springboot 测试中使用和不使用 @Autowired Constructor 有啥区别

Posted

技术标签:

【中文标题】在 kotlin 的 springboot 测试中使用和不使用 @Autowired Constructor 有啥区别【英文标题】:What is difference between using and not using @Autowired Constructor in springboot test with kotlin在 kotlin 的 springboot 测试中使用和不使用 @Autowired Constructor 有什么区别 【发布时间】:2020-10-17 21:58:29 【问题描述】:

我想在 spring boot 2.3.0 中使用 JUnit5 编写测试代码。

首先,我尝试使用构造函数进行依赖注入。

如下图

但是当我开始我的测试代码时,整个测试都失败了。

错误日志是No ParameterResolver registered for parameter blah blah blah...

所以我认为 Bean Injenction 失败了,即使我使用的是构造函数。

另外,即使我在 Intellij IDE 中使用了构造函数,也没有显示 Bean Icon。

但是当我在构造函数中添加@Autowired constructor时,Bean Icon开始出现了。

如下图

Resources Class 是一个只在测试代码中使用的 bean。

我可以解决问题,但我真的不明白发生了什么。

我想知道What is difference between using and not using @Autowired Constructor

请告诉我这个神奇的@Autowired Constructor 是如何工作的

【问题讨论】:

【参考方案1】:

@Autowired 在测试用例的构造函数上是一个信号给测试框架(在本例中是 Jupiter SpringExtension)使用 Spring 上下文解析构造函数参数。如果没有注解,Jupiter 尝试通过其他机制查找参数解析器,但没有找到,因此报错。

【讨论】:

我真的想说声谢谢。我能够从你那里找到这个问题的答案。感谢你们对我的帮助。 :)

以上是关于在 kotlin 的 springboot 测试中使用和不使用 @Autowired Constructor 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

kotlin + springboot整合mybatis操作mysql数据库及单元测试

在 Kotlin 和 JUnit5 中测试 Spring Boot 缓存

使用 Spring Boot 进行 Kotlin 集成测试

如何在用 Kotlin 编写的 JUnit 5 测试类中注入 Spring bean?

springboot 1.5.10 +kotlin 1.2.20 解决 java.lang.ClassNotFoundException: kotlin.reflect.KotlinReflectio

kotlin + Spring boot 中的单元测试休息控制器