微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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中找到全部内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。