Java / Eclipse:如何为JUnit测试配置Run Configuration的Classpath?

时间:2012-08-17 12:38:38

标签: java eclipse junit classpath

我有一个具有以下目录结构的Eclipse项目:

MyProj/
    src/main/java/
        com.me.myproject.widgets
            Widget.java
    src/main/config
        widget-config.xml
    src/test/java
        com.me.myproject.widgets
            WidgetTest.java
    src/test/config
        widget-test-config.xml

Widget类从类路径的任何位置读取其配置(XML)文件,并使用它来配置其属性。

当我右键单击文件并转到WidgetTest时,我试图让Run As >> JUnit Test的测试用例(所有用JUnit编写)在Eclipse中运行。我假设我必须使用自己配置的类路径将其作为自定义的运行配置运行,但我不确定,因为我以前从未这样做过。

有人知道如何让自定义运行配置作为JUnit测试运行WidgetTest.java,并成功将src/test/config/widget-test-config.xml放在类路径上吗?提前谢谢!

请注意,这个问题关于如何从运行时类路径中读取资源,关于如何在Eclipse的JUnit Run Config类路径中首先获取它!

2 个答案:

答案 0 :(得分:7)

我的印象是,只要你在Eclipse认为是源文件夹的内部有src/test/config/widget-test-config.xml,它就应该已经在类路径中了。

src / test是Eclipse的源文件夹吗?如果是,但您仍然遇到问题,请尝试以下实验:

如果将widget-test-config.xml复制到src root,Widget类可以读取它吗?

如果是

然后问题是测试文件夹不在类路径上,你可能想尝试手动添加它。

右键单击WidgetTest并选择Run As -> Junit Test。这应该会自动创建一个可在Run -> Run Configurations访问的Junit运行配置。您修改它的Classpath条目以添加包含.xml文件的项目,如下所示:

enter image description here

如果否

如果,即使将.xml文件移动到src根目录(即默认包)之后,您的窗口小部件类也无法读取它,那么还有其他错误。在这种情况下,如果您可以在WidgetTest中提供试图读取.xml文件的代码片段,那就太棒了。

工作代码

这是一些有效的代码:

public class A {

    @Test
    public void test() {
        InputStream stream = A.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader()
            .getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }

}

以上对我来说在一个简单的JAVA项目中运行良好。 (运行良好意味着获得 '真正的'打印在控制台上)

我正在为你创建一个GITHub repo,以便轻松地试用这段代码。

GIT Hub Repo with Test project

您应该可以在 this zip中导入项目并查看代码是否有效。右键单击测试类A并单击Run As -> Junit Test,您应该在控制台中看到两个true

答案 1 :(得分:2)

如果您的WidgetTest类被编写为JUnit测试,eclipse将尝试自动将其作为Junit测试运行。如果没有,则应右键单击包浏览器中的类,选择Run As>>运行配置>>选择Junit

运行Junit测试:

  • 在JUnit3中,该类应该实现TestCase并且所有方法名称应该开始“test”

  • 在JUnit4中,所有方法都应该以@Test注释开头

要将该配置文件放在类路径中:在设置上面的运行配置时,转到右上方窗格中的Arguments选项卡,在VM参数中指定classpath:

   -cp .:/path/to/the/config/file 

但是,如果该文件位于源目录中的包中,则它应自动包含在类路径中。