【发布时间】:2018-05-06 09:39:19
【问题描述】:
我将我的应用程序从 spring 4.x 降级到 3.x,现在当我在 spock 中使用自动装配 bean 进行简单测试时,这个 bean 为空。
@ContextConfiguration(classes = Configuration.class)
class SomeTestClass extends Specification {
@Autowired
SomeService someService
def "someService"(){
expect:
someService.returnHelloWorld() == "Hello World" // (<- NullPointer)
}
}
我的 pom.xml 文件:
<dependencies>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.12</version>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>1.1-groovy-2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<version>1.1-groovy-2.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
当我将 spock-core/spring 降级到 0.6-groovy-1.8 并将 groovy-all 降级到 1.8 并触发我的测试后,它会抛出这个异常:
org.springframework.beans.factory.BeanCreationException: 错误 创建文件中定义的名称为“someAnotherBean”的bean ../SomeBean.class:bean 的实例化失败;嵌套异常 isorg.springframework.beans.BeanInstantiationException:可以 notinstantiate bean 类 [..SomeBean.class]:无默认值 构造函数找到;嵌套异常是 java.lang.NoSuchMethodException:..SomeBean.()
这个 bean 包含我用来在类中初始化最终字段的构造函数:
@Component
@PropertySource("classpath:someproperties.properties")
public class HeaderFactory {
private final SomeObject someObject;
public HeaderFactory(@Value("${someProperty1}") String someProperty1, @Value("${someProperty2}") String someProperty2) {
SomeObject someObject = new SomeObject(someProperty1,someProperty2);
this.someObject = someObject;
}
}
在我降级春季版本之前,一切都运行良好。有什么想法吗?
【问题讨论】:
-
我不认为 Spring 早在
3.2.x就支持自动构造函数注入,但我可能错了。您可以尝试在构造函数中添加@Autowired注释。 -
也许你知道这个的任何替代方案?
-
在下面查看我的答案。
-
Spock-1.1 与 Spring 3 存在错误,请尝试 spock-1.2 快照,或稳定的 jitpack.io 构建,详情请参阅github.com/spockframework/spock 的自述文件。
标签: java spring groovy spock spring-test