Improve BeanFactoryExtensionsTests

Comparing to Java's `BeanFactory.getBean(Class<T> requiredType)`, Kotlin's `BeanFactory.getBean<T>()` supports generic type as `T`, this commit add test to cover that and add assertions.

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
This commit is contained in:
Yanming Zhou 2025-04-01 12:00:43 +08:00
parent 10e32c92e6
commit 32647a1acf
1 changed files with 13 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -19,6 +19,7 @@ package org.springframework.beans.factory
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.springframework.core.ResolvableType
@ -26,6 +27,7 @@ import org.springframework.core.ResolvableType
* Mock object based tests for BeanFactory Kotlin extensions.
*
* @author Sebastien Deleuze
* @author Yanming Zhou
*/
class BeanFactoryExtensionsTests {
@ -35,10 +37,18 @@ class BeanFactoryExtensionsTests {
fun `getBean with reified type parameters`() {
val foo = Foo()
every { bf.getBeanProvider<Foo>(ofType<ResolvableType>()).getObject() } returns foo
bf.getBean<Foo>()
assertThat(bf.getBean<Foo>()).isSameAs(foo)
verify { bf.getBeanProvider<ObjectProvider<Foo>>(ofType<ResolvableType>()).getObject() }
}
@Test
fun `getBean with reified generic type parameters`() {
val foo = listOf(Foo())
every { bf.getBeanProvider<List<Foo>>(ofType<ResolvableType>()).getObject() } returns foo
assertThat(bf.getBean<List<Foo>>()).isSameAs(foo)
verify { bf.getBeanProvider<ObjectProvider<List<Foo>>>(ofType<ResolvableType>()).getObject() }
}
@Test
fun `getBean with String and reified type parameters`() {
val name = "foo"
@ -52,7 +62,7 @@ class BeanFactoryExtensionsTests {
val arg2 = "arg2"
val bar = Bar(arg1, arg2)
every { bf.getBeanProvider<Bar>(ofType<ResolvableType>()).getObject(arg1, arg2) } returns bar
bf.getBean<Bar>(arg1, arg2)
assertThat(bf.getBean<Bar>(arg1, arg2)).isSameAs(bar)
verify { bf.getBeanProvider<Bar>(ofType<ResolvableType>()).getObject(arg1, arg2) }
}