使用JUnit同时使用Eclipse和Maven的类路径问题

时间:2010-05-19 12:40:39

标签: java eclipse maven-2 junit

在JUnit测试中,我使用此代码加载特定于测试的配置文件:

InputStream configFile = getClass().getResourceAsStream("config.xml");

当我通过eclipse运行测试时,它需要xml文件与测试文件位于同一目录中。

当我使用maven构建项目时,它需要xml在src/test/resources中,以便将其复制到target/test-classes

如何让它们只与一个文件一起使用?

4 个答案:

答案 0 :(得分:16)

将config.xml文件放在src / test / resources中,并在Eclipse中添加src / test / resources作为源文件夹。

另一个问题是getResourceAsStream("config.xml")如何使用包。如果调用它的类在com.mycompany.whatever包中,那么getResourceAsStream也期望config.xml位于同一路径中。但是,这与类路径中的路径相同,而不是文件系统。您可以将文件放在src / test / resources下的相同目录结构中 - src / test / resources / com / mycompany / whatever / config.xml - 或者您可以在路径中添加前导“/” - 这会使{{{ 1}}从类路径的基础加载文件 - 所以如果你把它改成getResourceAsStream你可以把文件放在src / test / resources / config.xml中

答案 1 :(得分:4)

尝试将src/test/resources/目录添加为Eclipse项目中的源文件夹。这样,当Eclipse尝试运行单元测试时,它应该在类路径上。

答案 2 :(得分:1)

我知道这是一个老问题,但我偶然发现它并发现上述答案都没有提到Maven Eclipse插件,这很奇怪。运行mvn eclipse:eclipse,它会将 src / main / resources src / test / resources 等添加到Eclipse中的“Java Build Path”中。

它有很多你可以从那里配置的东西(如果你需要偏离惯例,如果你不这样做,那么它已经准备好了):

通常,如果您使用的是Maven,请不要手动更改Eclipse中的内容。永远不要提交.classpath / .project,而只是使用Maven Eclipse插件生成这些文件(和/或更新它们)。这样你就可以为你的项目配备一个配置源,MAVEN,而不是手动设置,你最终不得不告诉别人使用和记住你自己等等。如果它是一个Maven项目:从源代码控制中检查它,运行“mvn eclipse:eclipse”它应该在Eclipse中工作,如果你的POM不需要工作的话。

答案 3 :(得分:0)

如果你只是在测试时需要它,你可以通过文件系统加载它,这里的上下文应该是相同的两种情况:

new FileInputStream(new File("target/test-classes/your.file"));

不漂亮,但它有效