Pet*_*ete 20 java eclipse junit spring system-properties
我们的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 {
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉我的测试它应该在Spring加载之前将系统属性"env"设置为"test"?因为using 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>
Run Code Online (Sandbox Code Playgroud)
使用application.properties,production.properties和test.properties中定义的数据库属性.
关键是,我想对所有环境使用相同的上下文文件,否则我可以告诉我的测试使用不同的上下文,我将PropertyPlaceholder属性"location"设置为test.properties ...但我想要我的测试也涵盖了我的上下文,以便尽可能早地捕获任何错误(我正在使用spring-web-mvc在我们的网络应用程序上进行端到端测试,这会加载整个网络应用程序,提供一些很好的反馈,我不想放松那个).
到目前为止,我能看到的唯一方法可能是配置JUnit运行器以包含一些系统属性设置参数,但我不知道如何做到这一点.
Ale*_*exR 41
我现在正在研究完全相同的问题,希望找到方法.您可以调用System.setProperty()测试用例的静态初始值设定项.
bra*_*tan 19
在Eclipse中,右键单击JUnit测试类,选择Run As> Run Configurations ...,然后转到Arguments选项卡,在VM Arguments下,添加系统属性条目,例如-Dcatalina.base = C:\ programs\Apache的Tomcat的7.0.32
| 归档时间: |
|
| 查看次数: |
43578 次 |
| 最近记录: |