问题描述
我需要在 Spock
测试启动时执行一次代码块。我无法在 @Autowired
中使用 setupSpec()
,这是此类初始化的默认方法,但是直到那时才会加载 @Bean
。
在网络上找到(可追溯到 2015 年)source :
该行为是 Spring 的 TestContext 框架设计的结果。我不 找到一种方法来改变它而不会遇到其他问题。情况并没有什么不同 在 JUnit 中使用 TestContext 框架时。
已经 6 年了,有什么干净的方法可以做到这一点吗?我想省略肮脏的解决方法
解决方法
您很幸运,感谢@erdi 在 Add support for injection into @Shared fields in spock-spring module 中实现了这一点,您可以在 Spock Snapshot 2.0 版本中尝试该功能,它将在 Spock-2.0M5 版本中使用。您需要通过在规范中放置 if let name: String = String(cString: (interface?.ifa_name)!),name == "utun0" {
print("Ipfound")
ipFound = true;
}
来选择加入 @Shared
注入,这也非常重要,您阅读 javadoc 并了解这样做的上述含义。