问题描述
我是一名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中找到全部内容。