使用Spring,MongoDB和Kotlin进行JUnit依赖注入

问题描述

我是一名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)

默认情况下,除非使用@TestConstructor批注或将spring.test.constructor.autowire.mode系统属性更改为all,否则Spring不会自动装配测试类的构造函数。

您可以从Spring Framework Reference中找到全部内容。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...