我正在尝试将一个在spring上下文中配置的规则注入spock规范。
@ContextConfiguration(locations=["spring.xml"])
class TestSpec extends Specification {
@Rule @Inject //@Autowired
public ActivitiRule activitiRule;
@Deployment
def "Process test"() {
when:
//...
then:
//...
}
}
问题是spock在不尊重@Inject
或@Autowired
注释的情况下自行实例化规则。在JUnit中,这可以按预期工作。是否有可能将规则注入spock?
答案 0 :(得分:1)
有趣的用例。问题是Spock的Rule扩展在Spock的Spring扩展注入它之前调用了规则。有可能解决这个问题。如果您不介意,请在http://issues.spockframework.org提交问题。目前,仅注入MethodRule
s(而非TestRule
s)将按预期工作。
答案 1 :(得分:1)
只要开箱即用(参见Issue),我找到的一种可能的解决方法是使用Spring TestExecutionListener而不是TestRule,这当然只有在你写作时才有用自己的规则。
在TestExecutionListener中,您可以访问ApplicationContext并获取所需的任何bean。