![](/img/trans.png)
[英]Unit test using class with RestTemplate injected with java and spring boot
[英]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
加載測試配置文件並使用@ActiveProfile
將test
作為該測試 class 的活動配置文件
試試這個 spring.config.additional-location=classpath:/application-test.properties
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.