[英]Set System Property for JUnit Runner (Eclipse) to test a Spring Web App
我們的Web應用程序使用SystemPropertyPlaceholder根據系統屬性的值加載屬性文件(參見下文)
在本地運行它的默認設置存儲在application.properties
。 在生產服務器上,我們目前只是在部署應用程序之前將“env”設置為“production”,它將加載production.properties
。
現在,為了測試應用程序,應該使用test.properties
文件。
如果我在我們的jenkins構建中運行所有測試,則添加-Denv=test
將按預期工作。 但是,如果我只想在Eclipse中使用集成的JUnit運行器運行單個測試呢?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = WebContextLoader.class, locations = {"classpath:application-context.xml" })
public class SomeTest {
有沒有辦法告訴我的測試它應該在Spring加載之前將系統屬性“env”設置為“test”? 因為使用MethodInvokingFactoryBean
只會出於某種原因設置它,即使我在加載屬性文件之前設置它:
<bean id="systemPrereqs"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<!-- The new Properties -->
<util:properties>
<prop key="env">test</prop>
</util:properties>
</property>
</bean>
<bean
class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="searchContextAttributes" value="true" />
<property name="contextOverride" value="true" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>classpath:${env}.properties</value>
<value>${config}</value>
</list>
</property>
</bean>
<bean id="managerDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username">
<value>${database.username}</value>
</property>
<property name="password">
<value>${database.password}</value>
</property>
<property name="url">
<value>${database.url}</value>
</property>
</bean>
使用application.properties,production.properties和test.properties中定義的數據庫屬性。
關鍵是,我想對所有環境使用相同的上下文文件,否則我可以告訴我的測試使用不同的上下文,我將PropertyPlaceholder屬性“location”設置為test.properties ...但我想要我的測試也涵蓋了我的上下文,以便盡可能早地捕獲任何錯誤(我正在使用spring-web-mvc在我們的網絡應用程序上進行端到端測試,這會加載整個網絡應用程序,提供一些很好的反饋,我不想放松那個)。
到目前為止,我能看到的唯一方法可能是配置JUnit運行器以包含一些系統屬性設置參數,但我不知道如何做到這一點。
我現在正在研究完全相同的問題,並希望找到方法。 您可以將System.setProperty()
調用到測試用例的靜態初始化程序中。
在Eclipse中,右鍵單擊JUnit測試類,選擇Run As> Run Configurations ...,然后轉到Arguments選項卡,在VM Arguments下,添加系統屬性條目,例如-Dcatalina.base = C:\\ programs \\ Apache的Tomcat的7.0.32
您可以嘗試使用depends-on
屬性讓方法在其他人之前調用bean
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.