使用 Spring、MongoDB 和 Kotlin 的 JUnit 依赖注入
JUnit dependency injection with Spring, MongoDB, and Kotlin
我是一名 Java 开发人员,他正在通过编写 REST API 涉足 Spring 和 Spring WebFlux。我通常做 TDD,当我尝试编写一些 JUnit 测试用例来测试 MongoDB 查询时,我 运行 遇到了一些问题。
示例存储库:
@Repository
interface XReactiveRepository: ReactiveMongoRepository<X, String>
相当于Java:
@Repository
public interface XReactiveRepository extends ReactiveMongoRepository<X, String> { }
在 Java 中,我可以使用 @Autowired 将此依赖项注入单元测试,如下所示:
@Autowired
private XReactiveRepository repository
但是我不能直接在 Kotlin 中这样做
@Autowired
private repository: XReactiveRepository
这会导致编译问题,指出它必须被初始化或声明为抽象的。我已经尝试通过构造函数进行依赖注入,但这也不起作用。 Kotlin/Spring 开发人员知道如何正确地将存储库注入 JUnit5 测试吗?
编译问题意味着你的 @Autowired
字段应该是 lateinit var
.
但是,Spring 建议使用构造函数注入而不是字段注入。
如果您使用 @Autowired
,即
,构造函数注入也应该有效
class YourTestClass(@Autowired private val repository: XReactiveRepository)
默认情况下 Spring 不会自动装配测试 class 构造函数,除非您使用 @TestConstructor
注释或将 spring.test.constructor.autowire.mode
系统 属性 更改为 all
.
中找到所有这些
我是一名 Java 开发人员,他正在通过编写 REST API 涉足 Spring 和 Spring WebFlux。我通常做 TDD,当我尝试编写一些 JUnit 测试用例来测试 MongoDB 查询时,我 运行 遇到了一些问题。
示例存储库:
@Repository
interface XReactiveRepository: ReactiveMongoRepository<X, String>
相当于Java:
@Repository
public interface XReactiveRepository extends ReactiveMongoRepository<X, String> { }
在 Java 中,我可以使用 @Autowired 将此依赖项注入单元测试,如下所示:
@Autowired
private XReactiveRepository repository
但是我不能直接在 Kotlin 中这样做
@Autowired
private repository: XReactiveRepository
这会导致编译问题,指出它必须被初始化或声明为抽象的。我已经尝试通过构造函数进行依赖注入,但这也不起作用。 Kotlin/Spring 开发人员知道如何正确地将存储库注入 JUnit5 测试吗?
编译问题意味着你的 @Autowired
字段应该是 lateinit var
.
但是,Spring 建议使用构造函数注入而不是字段注入。
如果您使用 @Autowired
,即
class YourTestClass(@Autowired private val repository: XReactiveRepository)
默认情况下 Spring 不会自动装配测试 class 构造函数,除非您使用 @TestConstructor
注释或将 spring.test.constructor.autowire.mode
系统 属性 更改为 all
.