Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何在SpringBootTest中使用KotlinBeans dsl初始值设定项_Spring Boot_Kotlin_Spring Boot Test - Fatal编程技术网

Spring boot 如何在SpringBootTest中使用KotlinBeans dsl初始值设定项

Spring boot 如何在SpringBootTest中使用KotlinBeans dsl初始值设定项,spring-boot,kotlin,spring-boot-test,Spring Boot,Kotlin,Spring Boot Test,我有一个简单的应用程序,其中使用kotlin beans dsl声明了几个bean: @SpringBootApplication class App val beans = beans { bean<A>() } fun main(args: Array<String>) { runApplication<MatchmakerApp>(*args) { addInitializers(beans) } } @Re

我有一个简单的应用程序,其中使用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
启动这个测试

UnsatisfiedDependencyException: Error creating bean with name appController 
Caused by: NoSuchBeanDefinitionException: No qualifying bean of type 'A' available:`
似乎在
springbootest
上下文创建期间未调用bean初始值设定项

我们需要在SpringBootTest中添加KotlinBeanDSL初始值设定项吗


@ContextConfiguration(initializers=…)
的一般方法在这里不起作用,因为它查找类。

选项1

FuBeansInitializer
添加到与测试目录中的
App
类相同的包中

class FuBeansInitializer : ApplicationContextInitializer<GenericApplicationContext> {
    override fun initialize(context: GenericApplicationContext) = beans.initialize(context)
}

因此,源文件中不会有任何修改。测试也可以正常工作。

您甚至可以拥有多个
ApplicationContextInitializer
,并在属性中提供以逗号分隔的列表(顺序事项)。如果您在主代码中使用了初始值设定项,并且希望再次使用bean定义dsl覆盖一些bean,那么这将非常有用。

您是否查看了?可能的重复项
class FuBeansInitializer : ApplicationContextInitializer<GenericApplicationContext> {
    override fun initialize(context: GenericApplicationContext) = beans.initialize(context)
}
context.initializer.classes=path.to.FuBeansInitializer