2013-08-31 128 views
3

我想運行我的測試套件在多個環境下像下面一個測試套件:運行在多種環境

ApplicationContextTest.class

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("/application-context.xml") 
public class MyTest{ 

@Autowired 
private ApplicationContext applicationContext; 

@Test 
public void test1() { 
    ((ConfigurableEnvironment)applicationContext.getEnvironment()).setActiveProfiles("env1"); 
    ((GenericXmlApplicationContext)applicationContext).refresh(); 
} 

@Test 
public void test2() { 
    ((ConfigurableEnvironment)applicationContext.getEnvironment()).setActiveProfiles("env2"); 
    ((GenericXmlApplicationContext)applicationContext).refresh(); 
} 

}

的applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 

<beans profile="env1"> 

</beans> 

<beans profile="env2"> 

</beans> 

當我運行測試,我得到了一個異常

Caused by: java.lang.IllegalStateException: GenericApplicationContext does not support multiple refresh attempts: just call 'refresh' once

在那裏設置的活動配置文件的ApplicationContext啓動後的任何方式?

或解決上述異常的任何解決方案?

謝謝。

+0

沒人能幫我解決這個問題嗎?好難過 :( –

回答

0

正常的方式來選擇一個或多個特定的配置文件(S)是在運行測試

-Dspring.profiles.active=env1 

您還可以設置一個或多個配置文件(S)作爲默認與系統時設置系統屬性物業

-Dspring.profiles.default=env1 

我通常做這在我測試的靜態init方法

@BeforeClass 
public static void init() { 
    // set default spring test profile 
    System.setProperty("spring.profiles.default", "default"); 
} 

ÿ如果您搜索這些屬性,您會發現一些信息(如果您需要Spring代碼參考,則必須查看AbstractEnvironment類)。

我不知道如何在啓動後更改配置文件。在這種情況下,您可能必須在每個測試中使用新的JVM(例如可以使用reuseForks設置通過maven surefire插件完成)。或者甚至更好地將使用相同配置文件的測試放在相同的測試類中,並根據需要設置配置文件。

恕我直言,一個測試不應該依賴於特定的配置文件。測試應該通過 - 無論使用哪個配置文件。比你可以很容易地改變例如在測試(模擬)或「真實」環境之間。