访问包中的文件

时间:2011-08-22 19:45:53

标签: java junit

我正在使用JUnit对我的应用程序进行一些自动化测试,测试位于我的JUnit类包中名为tests的文件夹中。 截至目前,我使用以下方法访问文件:

File file = new File(MyClass.class.getResource("../path/to/tests/" + name).toURI());

有更清洁(更好)的方法吗?

由于

4 个答案:

答案 0 :(得分:3)

如果您想使用类加载器加载测试数据,则无法使用FileFile实例表示文件系统中的路径。该类从文件系统,jar文件,zip文件或其他地方加载文件。因此,类加载器不允许您访问文件,而是访问资源。

使用MyClass.class.getResourceAsStream("/the/absolute/path.txt")加载path.txt文件的内容作为输入流。此文件必须位于类路径中的任何位置:path.txt是在文件系统中还是在jar中,只要在类路径中找到它就无关紧要,只需在包the.absolute中找到。因此,如果您的数据文件位于测试文件夹中,该文件夹位于测试的sources目录下,则使用的路径应为/tests/data.txt。请注意,这是因为Eclipse会自动“编译”非Java文件的文件,只需将它们复制到输出目录(传统的bin或类),并且在运行测试时该目录位于类路径中。

如果要将此数据作为文本而不是字节加载,只需使用InputStream包裹InputStreamReader

答案 1 :(得分:0)

我确保它们在类路径中,然后使用

MyClass.class.getResourceAsStream("../path/to/tests/" + name);
但是,我不确定它会好得多。您对现在使用的内容有何看法?

这是因为/当资源文件在类路径中时。当它在Eclipse或Intellij的源路径中时,这是免费的。如果你正在使用Hudson或类似的东西进行自动化测试,你需要确保你的构建过程(Ant,Maven,shell脚本等等)也将它们放在类路径中。

答案 2 :(得分:0)

更好的方法是使用URL中的方法getFile(),如下所示:

File file = new File(MyClass.class.getResource("../path/to/tests/" + name).getFile());

答案 3 :(得分:0)

您的数据会更适合您的/ tests /文件夹。它会避免你使用从MyClass开始的相对路径,并且更合乎逻辑。此外,您可以为我的类提供一个文件参数来加载数据文件。然后用生产数据和测试数据调用它。

此致  斯特凡