使用 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.

您可以从 Spring Framework Reference.

中找到所有这些