为了在Eclipse上运行我的单元测试,我需要为VM设置一些属性。
因此,当我第一次运行JUnit测试时,我进入“Open Run Dialog”,然后在我的JUnit配置中进行此测试,我进入“Arguments”选项卡并将我需要的所有内容放在“VM arguments”文本中区域。
有没有办法在运行JUnit时自动添加一组属性,所以我只能右键单击测试类,然后单击“Run as> Junit Test”来运行测试?
技术信息: Eclipse 3.3.2,JUnit 4,Java 5
<小时/> 编辑,关于Aaron Digulla的回复:
这些属性用于Spring配置文件*。因此,我无法使用Aaron给出的想法,因为Spring将在测试运行之前进行初始化。
除此之外,我只需要知道我是否可以在Eclipse中轻松实现这一目标。因此,解决方案不得对Eclipse外部的应用程序编译产生任何影响,因为我的应用程序最终将由Maven2编译(和测试)。
*几个“单元”测试确实需要运行我的Spring配置。好的,我知道这不是真正的单元测试; o)
编辑2 :事实上,我确实是通过测试单元启动Spring配置。因此,在启动Spring之前,我检查系统属性,如果我的属性没有设置,那么我给它们所需的值......
然而,我有点失望的是Eclipse不能自动为我做这件事......
答案 0 :(得分:27)
你可以试试这个 - 转到
Window->Preferences->Java->Installed JREs
ans选择正在使用的JVM,而不是像
那样放置“默认VM”参数 -DrunningInEclipse
您可以在TestCase中查看:
System.getProperty("runningInEclipse") != null
答案 1 :(得分:7)
我的解决方案是为扩展TestCase的项目中的所有测试创建一个抽象测试基类。它必须是抽象的,因此自动单元测试查找器不会考虑它。
在这个类的静态代码块中,我设置了我需要的所有属性。这可确保代码只运行一次,并在项目中的任何测试之前运行。
[编辑]你说Spring在测试运行之前被初始化了。这是项目中的错误:必须是初始化Spring的测试。否则,您将始终遇到必须测试您无法控制的问题的问题。
因此,我建议将Spring init代码移动到可以在环境准备好的时候调用它的地方。
或者,检查环境是否在setUp()中正确设置,如果缺少属性则抛出错误。这样,您至少会知道为什么测试会在以后失败。但我仍然希望能够完全掌控哪个子系统变为现实。其他任何东西都只是为了灾难。
答案 2 :(得分:7)
当我想为junit测试设置一些属性条目时,我实现以下
protected void setUp() throws Exception {
super.setUp();
System.setProperty("Property1", "value1");
System.setProperty("Property2", "value2");
}
在调用测试方法之前设置属性
编辑: 您还可以从文件和系统属性中读取属性
答案 3 :(得分:1)
我从未理解为什么启动配置有定义环境变量的方法,但添加系统属性的唯一方法似乎是添加vm参数。
我解决这个问题的方法是对所需属性的存在进行测试(或抽象测试基类)测试,如果它们不在那里,那么我从类路径上的.properties文件加载它们。
这可行,因为我仍然可以覆盖它们或从ANT或Maven指定它们,但也可以'右键单击' - &gt;运行方式 - &gt; Junit测试各个测试文件。
编辑:这是让Spring以与上述相同的方式选择加载属性文件的示例:
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="database.properties"/>
<property name="ignoreResourceNotFound" value="true" />
<property name="systemPropertiesMode">
<util:constant static-field="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</property>
</bean>
答案 4 :(得分:1)
在我的一个junit测试中以这种方式同意使用的方法并且它起作用了
@BeforeClass public static void setupProperties() { System.setProperty("catalina.base", "C:\\sam-tomcat-7.0.42"); }