[英]Autowired bean in spock test null after downgrading spring from 4.3.x to 3.2.x
我將應用程序從Spring 4.x降級到3.x,現在當我在使用自動裝配bean的spock中進行簡單測試時,此bean為null。
@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:創建文件../SomeBean.class中定義的名稱為“ someAnotherBean”的bean時出錯:bean的實例化失敗; 嵌套異常isorg.springframework.beans.BeanInstantiationException:無法實例化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;
}
}
在我升級春季版本之前,一切工作都很好。 有任何想法嗎?
您可以創建一個配置類並在那里定義有問題的bean:
@Configuration
class MyConfig {
@Value("${someProperty1}") String prop1;
@Value("${someProperty2}") String prop2
@Bean
public SomeBean someBean() {
SomeBean bean = new SomeBean(prop1, prop2);
return bean;
}
}
此處的文檔: https : //docs.spring.io/spring/docs/3.2.0.RELEASE/spring-framework-reference/html/new-in-3.0.html#new-feature-java-config
我通過以下方式解決了我的問題:
@Component
public class UrlBuilder {
private final String host;
private final String port;
private final String protocol;
@Autowired
public UrlBuilder(Environment env) {
this.protocol = env.getRequiredProperty("app.server.protocol").toLowercase();
this.serverHost = env.getRequiredProperty("app.server.host");
this.serverPort = env.getRequiredProperty("app.server.port", Integer.class);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.