spring-boot - 如何在 SpringBootTest 中使用 Kotlin beans dsl 初始化程序
问题描述
我有一个简单的应用程序,其中有几个用 kotlin beans dsl 声明的 bean:
@SpringBootApplication
class App
val beans = beans {
bean<A>()
}
fun main(args: Array<String>) {
runApplication<MatchmakerApp>(*args) {
addInitializers(beans)
}
}
@RestController
class AppController(val a: A) {
// some code
}
class A
我有一个集成测试:
@RunWith(SpringRunner::class)
@SpringBootTest
class AppControllerTest {
@Test
fun dummyTest() {
assert(true)
}
}
启动这个测试我得到
UnsatisfiedDependencyException: Error creating bean with name appController
Caused by: NoSuchBeanDefinitionException: No qualifying bean of type 'A' available:`
似乎在SpringBootTest
上下文创建期间未调用 bean 初始化程序。
我们需要在 SpringBootTest 中添加什么 kotlin bean dsl 初始化程序?
with 的一般方法@ContextConfiguration(initializers = ...)
在这里不起作用,因为它会查找类。
解决方案
在测试目录中添加FuBeansInitializer
与类相同的包:App
class FuBeansInitializer : ApplicationContextInitializer<GenericApplicationContext> {
override fun initialize(context: GenericApplicationContext) = beans.initialize(context)
}
添加context.initializer.classes
到测试application.properties:
context.initializer.classes=path.to.FuBeansInitializer
因此,源文件中不会有任何修改。并且测试会正常工作。
推荐阅读
- javascript - JavaScript语法:将json作为参数传递给函数
- python - 如何从 .csv 读取并写入对其他 .csv 的修改?
- python - 为什么我不能指定默认选择的单选按钮?
- c++ - 我无法通过 Visual Studio 中的用户输入创建常量变量
- c# - 将两个 makefile 合并为一个 makefile 出错
- django - AWS 域的 SSL 证书?
- c - %s 格式的字符串操作
- elasticsearch - 如何使用带有 logstash elaticsearch 输出更新功能的摄取管道
- javascript - 为什么控制台日志在返回语句后不起作用?
- python - RecursionError:超出最大递归深度 - tkinter 计时器项目