在 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 缓存
如何在用 Kotlin 编写的 JUnit 5 测试类中注入 Spring bean?
springboot 1.5.10 +kotlin 1.2.20 解决 java.lang.ClassNotFoundException: kotlin.reflect.KotlinReflectio