Kotlin + Spring 5功能豆与传统Bean混合测试而无需弹簧引导

时间:2019-05-23 09:46:26

标签: spring kotlin dsl springrunner

假设我有一堂课注入了很多春豆:

@Component
open class CoreContext {

  @Inject
  protected lateinit var bean1 : SomeInterface1

  @Inject
  protected lateinit var bean2 : SomeInterface2

}

它在context:component-scan的{​​{1}}块中定义,在传统的SpringTest中,它的工作原理如下:

core.xml

现在,我想尝试使用DSL样式定义bean,并将这些DSL定义的bean与旧bean一起使用:

@RunWith(SpringRunner::class)
@ContextConfiguration(locations = ["classpath:core.xml"])
class CoreContextTest { ... }

@Component class MyBeans : CoreContext() { val beans = beans { bean("simpleComparator") { Comparator<Number> { o1, o2 -> o1.toInt().minus(o2.toInt()) } } } } 位于MyBeans软件包中,并且IntelliJ可以正确检测到它。 detected by IntelliJ

但是如何测试这个simpleComparator?

我尝试component-scan,但是intelliJ抱怨@Inject simpleComparator : Comparator<Number>。并且在运行时,它按预期失败。

No beans of Comparator<Number> type found

当我想打印出所有已注册的bean时,找不到 @RunWith(SpringRunner::class) @ContextConfiguration(locations = ["classpath:core.xml"]) class MyBeansTest { @Inject private lateinit var context: ApplicationContext // @Inject // No beans of Comparator<Number> type found // private lateinit var simpleComparator : Comparator<Number> @Test fun printBeans() { logger.info("context = {}", context) context.beanDefinitionNames.forEach { name -> logger.info("{}", name) } } } bean。

似乎所有相关信息都是基于SpringBoot的。但是我找不到纯粹的simpleComparator单元测试示例。谢谢。

版本:

SpringRunner

0 个答案:

没有答案