Spock setupSpec() 中的 @Autowired 变量访问

krz*_*kov 4 java spring spring-test spock

我需要在测试启动时执行一次代码块Spock。我无法使用@Autowiredin setupSpec()which is default 方法进行此类初始化,但是@Bean直到那时 s 才会被加载。

在网络上找到(可追溯到 2015 年)来源

该行为是 Spring 的 TestContext 框架设计的结果。我看不出有什么办法可以在不遇到其他问题的情况下改变它。将 TestContext 框架与 JUnit 结合使用时,情况没有任何不同。

已经六年了,有什么干净的方法可以做到这一点吗?我想省略肮脏的解决方法

Leo*_*ngs 5

你很幸运,感谢 @erdi 在Add support for Injection into @Shared fields in spock-spring module 中实现了这一点,你可以在 Spock Snapshot 2.0 版本中尝试该功能,它将出现在 Spock-2.0M5 版本中。您需要通过放置您的规范来选择加入@Shared注入@EnableSharedInjection,这也非常重要,您阅读 javadoc 并理解这样做所提到的含义。