簡體   English   中英

將Spring從4.3.x降級到3.2.x后,Spock中的自動裝配bean測試無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM