2015-11-06 114 views
0

我有這樣的設置彈簧單元測試配置文件從-D變量

RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { AppConfig.class, DevConfig.class, ProdConfig.class}) 
@ActiveProfiles({"prod", "dev"}) 
public class MyTest { 
........ 
} 

測試了AppConfig是我的應用程序的主要配置

有剛剛創建來回我的單元測試兩個配置類 從我的src /測試/資源的DEV配置類負載test_dev.properties/...

@Configuration 
@Profile("dev") 
@PropertySource("classpath:test_dev.properties") 
public class DevConfig { 

} 

的ProdConfig類負載prod.properties

@Configuration 
@Profile("prod") 
@PropertySource("classpath:test_prod.properties") 
public class ProdConfig { 

} 

我想在@Act​​iveProfiles

改變值PROD和DEV之間輕鬆切換,但我希望能夠切換的測試環境下,如

mvn -Dspring.profiles.active=dev or prod install 

我已經試過

@ActiveProfiles({"prod", "dev"}) 
    then 
    mvn -Dspring.profiles.active=dev or prod install 

它似乎總是得到拾起

@Test 
    public void transferTenDollars() throws InsufficientFundsException { 
     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
     ctx.getEnvironment().setActiveProfiles("dev"); 
     ctx.register(TransferServiceConfig.class, StandaloneDataConfig.class, JndiDataConfig.class); 
     ctx.refresh(); 

     // proceed with assertions as above ... 
    } 

但這是

我見過的解決方案將失去使用@ContextConfiguration註解整點。

回答

1

我覺得開關

-Dspring.profiles.active=dev 

甚至可變

SPRING_PROFILES_ACTIVE=dev mvn install 
+0

你是正確的環境。但刪除@ActiveProfiles({「prod」}) 是解決我的問題的關鍵 – user5324782

+0

原因刪除@ActiveProfiles({「prod」,「dev」})解決了問題是因爲,而不是從您的代碼中指定活動配置文件,你想從命令行env var傳遞它。因此不需要做一個@ActiveProfiles – user5324782