如何将现有文本文件用于JUnit测试

时间:2013-12-05 17:03:04

标签: java file junit

我想对一个操作文本文件内容的类进行单元测试。我有一组现有的文本文件作为测试用例。我如何以及在何处存储将由JUnit测试使用的文本文件?

我已经尝试将它们与单元测试.Java文件放在同一目录中并尝试访问它们,但是我找不到找到的文件:

File baseFile = new File("base_test.txt");
assertTrue(baseFile.exists());

修改 根据答案,我尝试使用ClassLoader获取文件。文件在那里,但是当我尝试将InputStream用于这些文件时,我收到"Stream Closed"例外。

我尝试从文件和网址中获取InputStream

    FileInputStream in = new FileInputStream(new File(filename));
...
    InputStream in = baseUrl.openStream();

相同的例外。

3 个答案:

答案 0 :(得分:5)

您可以将文件放在类路径的根目录中(/bin,例如),然后您可以使用

将其作为流访问
getClass().getClassLoader().getResourceAsStream("/test.txt")

如果您的类打包为jar文件,这甚至可以工作。

如果您需要访问该文件,可以使用

File file = new File(getClass().getClassLoader().getResource("/test.txt").toURI());

当然,如果您想将文本文件放在测试类或其他文件夹旁边,可以使用

File file = new File(getClass().getClassLoader().getResource("/net/winklerweb/somepackage/test.txt").toURI());

或任何其他路径......

答案 1 :(得分:2)

当您将这些测试文件与测试代码一起保存时,请将其视为File,而不是应用程序资源

可以使用ClassLoader

定位和加载资源
// absolute location: if the resource resides at the root
URL url = getClass().getResource("/base_test.txt");

// relative location: if the resource is in the same path as your test classes 
URL url = getClass().getResource("base_test.txt"); 

Assert.assertNotNull(url);

InputStream in= resource.openStream();
// read from resource

答案 2 :(得分:1)

嗯,不,除非你被困在旧版本的JUnit上,答案是你应该使用@Rule注释,因为这个答案详细说明:Easy way to get a test file into JUnit