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



我有一个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,以便我可以将属性文件放在那里,但在运行时(当我运行单元测试时)仍然可以使用它

提前感谢!

正确的方法(这将确保您的代码在放入JAR时继续工作)是将src/test/config添加到项目的类路径中,并使用ClassLoadergetResourceAsStream()方法加载资源。例如

Thread.currentThread().getContextClassLoader().getResourceAsStream("app.properties")

这并不完全是类路径问题(因为您没有在这里加载类!)-问题是您的代码加载的文件相对于当前工作目录,默认情况下,当前工作目录是您的项目根目录。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"));

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

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

注意前面的"/"。

最新更新