我想对一个操作文本文件内容的类进行单元测试。我有一组现有的文本文件作为测试用例。我如何以及在何处存储将由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();
相同的例外。
答案 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