gpt4 book ai didi

spring-boot - 如何在单元测试中从依赖注入(inject)容器中获取实例?

转载 作者:行者123 更新时间:2023-12-02 13:36:20 30 4
gpt4 key购买 nike

假设我有以下类(class):

import com.fasterxml.jackson.databind.ObjectMapper

class Foo(private val jsonMapper: ObjectMapper) {
// ...
}

以及相应的测试:
import com.fasterxml.jackson.databind.ObjectMapper

@RunWith(MockitoJUnitRunner::class)
class FooTest {

private val jsonMapper = ObjectMapper().findAndRegisterModules()

private lateinit var foo: Foo

@Before
fun makeFoo() {
foo = Foo(jsonMapper)
}
}

我的问题是我必须调用 findAndRegisterModules (拥有 jsr310 支持等)手动。我更愿意让 Spring Boot 决定如何构建我的依赖项。

但是由于 java.lang.Exception: Test class should have exactly one public zero-argument constructor 导致以下失败:
import com.fasterxml.jackson.databind.ObjectMapper

@RunWith(MockitoJUnitRunner::class)
class FooTest(private val jsonMapper: ObjectMapper) {

private val foo = Foo(jsonMapper)
}

那么,处理这种情况的正确方法是什么?

最佳答案

您的测试失败,因为 JUnit4 测试需要有一个无参数构造函数。

此外,您的测试没有使用 Spring,因为您使用的是 @RunWith(MockitoJUnitRunner::class) 注释。此运行程序允许初始化您的 Mock 对象并将它们注入(inject)您的测试对象 (Javadoc)。

如果您想使用 Spring 构建您的测试主题及其依赖项,您需要使用一组不同的注释(查看 tutorial 了解更多详细信息):

@RunWith(SpringRunner::class)
@SpringBootTest
class FooTest {
@Autowired
lateinit var foo: Foo
}

关于spring-boot - 如何在单元测试中从依赖注入(inject)容器中获取实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56215354/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com