在Eclipse中运行JUnit时自动添加属性

时间:2009-03-11 08:09:29

标签: eclipse configuration junit

为了在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不能自动为我做这件事......

5 个答案:

答案 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");
        }