簡體   English   中英

如何在 Spring 引導中將屬性注入到測試 class 中?

[英]How to get properties injected into test class in Spring Boot?

如何將 application-test.properties 中的屬性加載到 Spring Boot 中的測試 class 中? 我做錯了什么但無法弄清楚?

我能夠從 application.properties 中為我的配置 class 獲取屬性,如下所示

package org.vinodh.testing;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import lombok.Data;

@Configuration
@ConfigurationProperties(prefix = "caching")
@Data
public class CachingConfig {

    @Value("${caching.name}")
    private String name;

    @Data
    public static class CacheSpec {
        private int minutesToExpire;
        private int maximumSize;

    }

    private Map<String, CacheSpec> specs;

    @Bean
    public void test() {
        System.out.println(name);
        System.out.println(specs);
    }

}

但是當我嘗試在測試 class 中做同樣的事情時,我得到 null 見下面的代碼。 如何讓我的測試 class 打印屬性文件中的值?

package org.vinodh.testing;

import java.util.Map;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;

import lombok.Data;

@RunWith(SpringRunner.class)
@ContextConfiguration
@ConfigurationProperties(prefix = "caching")
@TestPropertySource("/application-test.properties")
@Data
public class CachingConfigTest {

    @Value("${caching.name}")
    private String name;

    @Data
    public static class CacheSpec {
        private int minutesToExpire;
        private int maximumSize;
    }

    private Map<String, CacheSpec> specs;

    @Test
    public void test() {
        System.out.println(name);
        System.out.println(specs);
    }

}

應用程序屬性

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

應用程序-test.properties

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

實際上,您不需要在測試 class 中創建CacheSpec ,這也不推薦,您可以使用源 package 中的原始緩存規范。 但只需將getter添加到 CachingConfig 中的私有CachingConfig specs

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@Profile("test")
public class CachingConfigTest {

    @Autowired
    private CachingConfig cachingConfig;

    @Test
    public void test() {
        System.out.println(cachingConfig.getSpecs());
     }

 }

而且您也不需要@TestPropertySource ,您可以只使用@Profile加載測試配置文件並使用@ActiveProfiletest作為該測試 class 的活動配置文件

試試這個 spring.config.additional-location=classpath:/application-test.properties

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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