在JUnit测试中,我使用此代码加载特定于测试的配置文件:
InputStream configFile = getClass().getResourceAsStream("config.xml");
当我通过eclipse运行测试时,它需要xml文件与测试文件位于同一目录中。
当我使用maven构建项目时,它需要xml在src/test/resources
中,以便将其复制到target/test-classes
。
如何让它们只与一个文件一起使用?
答案 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"));
不漂亮,但它有效