如何在Eclipse中为JUnit启动配置默认工作目录?

时间:2020-03-06 14:35:13  来源:igfitidea点击:

我们的Java代码(不是测试代码)从当前目录读取文件,这意味着每当我们运行代码时都需要正确设置工作目录。

从Eclipse中启动JUnit测试时,会自动创建启动配置。问题是,默认情况下,启动配置中的工作目录始终是根项目目录,该目录总是错误的,测试失败,我必须打开启动配置对话框,更改工作目录并重新启动测试。这很烦人。当我运行一个测试方法时,也会发生同样的事情。

我已经考虑过这些:

  • 从测试代码更改当前目录-在设计上是不可能的。
  • 打开文件时,传递父目录参数-太难了,因为这会影响很多地方。
  • 使用Eclipse的"复制启动配置"功能,可以从已经具有正确工作目录集的现有启动配置中创建新的启动配置。这在这里实际上没有任何意义,因为我想通过调用"作为JUnit测试运行此测试/方法"来快速启动测试或者测试方法。

总而言之,看起来这是Eclipse的责任,而不是代码。

有没有办法为所有将来新创建的JUnit启动配置设置默认的工作目录?

解决方案

这是一个主观的答案:

我相信测试做错了,我们不应该使用相对或者完整路径从JUnit加载文件,而是将它们作为项目中的资源(将它们添加到构建路径中)并作为资源进行加载在JUnit测试中。这样,如果文件系统上发生了某些更改,则有人使用了不同的文件系统或者IDE,但仍将它们保留在构建路径中(作为源文件夹),则不会有问题。

我不确定这是否是意思,但是如果我们真的要更改它,请转到运行配置选项->JUnit->参数选项卡,在底部(Eclipse 3.4),我们会看到工作目录,单击"其他"从那里更改它。

我还没有发现执行此操作的可能性,但是我们可以使用:

getClass()。getResourceAsStream(filename);

getClass()。getClassLoader()。getResourceAsStream(filename);

此方法在类路径上找到资源。
第一个相对于类的位置,第二个相对于任何类路径"根条目"。然后,我们可以例如将项目根目录添加到类路径。

但是,如果我们也想写入文件,则此方法不起作用。

如果测试依赖于当前的工作目录,那么我认为测试的责任是正确设置该工作目录,并配置要测试的类以指向该目录。

如果大多数测试都有超类,请在其中编写一个常量。
或者:如果大多数测试都有超类,请编写@Before设置方法。
或者:如果大多数测试没有超类,请在测试代码库的某个类中编写一个常量。

据我所知,无法为Eclipse 3.4中将来的JUnit启动配置更改默认的工作目录。此问题也已报告为Eclipse错误数据库中的错误。

但是,在IDEA中是可能的。有一个"编辑默认值"按钮,用于分别为每种启动配置类型设置各种默认值。

使用Eclipse 3,我们可以设置工作目录。转到运行/调试配置->参数选项卡。在工作目录中,选择"其他",然后输入测试的根目录