如何在Eclipse中指定测试类路径

时间:2012-01-31 22:55:52

标签: java eclipse classpath

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

MyProj
    >> src/main/java
    >> src/main/config
    >> src/test/java
    >> src/test/config

src/test/config内部,我有一个名为app.properties的属性文件,其中包含src/main/javasrc/test/java中的类都使用的属性。

我用来查找属性文件的所有代码如下所示:

try {
    Properties props = new Properties();

    props.load(new FileInputStream("app.properties"));

    someString = props.getProperty("app.title.color");
    // etc.
} catch(Exception exc) {
    // Handle exception...
}

但是当我运行这个时,我收到以下错误(在上面的catch子句中处理):

  

java.io.FileNotFoundException:   app.properties(系统找不到指定的文件)

但是当我将app.properties文件移动到我的项目根目录(与src/main/java处于同一级别)并重新运行代码时,它运行良好。

显然,这是一个类路径问题。如果我转到Build Path >> Configure Build Path >> Source,我发现src/test/config实际上是构建路径上的源文件夹。这可能并不意味着它也在类路径上 !!!

如何配置Eclipse以在类路径上查找src/test/config,以便我可以将我的属性文件放在那里,但仍然可以在运行时使用它(当我运行单元测试时)?

提前致谢!

3 个答案:

答案 0 :(得分:3)

执行此操作的正确方法(将确保代码继续工作,如果它被放入JAR中)是将src/test/config添加到项目的类路径中,并使用{加载资源{1}} getResourceAsStream()的方法。 e.g。

ClassLoader

答案 1 :(得分:2)

这不是一个类路径问题(因为你没有在这里加载一个类!) - 问题是你的代码是相对于当前工作目录加载文件的,默认情况下你的项目根目录。 FileInputStream不知道类路径是什么 - 它只是加载文件!

您可以指定文件的路径:

props.load(new FileInputStream("src/test/config/app.properties"));

虽然最好在配置行(或Eclipse运行配置文件)中将config目录指定为系统属性:

-Dconfig.dir="src/test/config/"

然后加载相对于此目录的文件,如:

public static final String CONFIG_DIR = System.getProperty("config.dir");
props.load(new FileInputStream(CONFIG_DIR+"app.properties"));

答案 2 :(得分:0)

合并文件夹,但您必须以不同方式访问属性文件,作为相对于类的资源:

    InputStream is = YourClassName.class.getResourceAsStream("/app.properties");

注意前导“/”。