我想阅读我的CsvReader适配器的Junit测试。它在构造函数中将filename作为参数。我已经在src / test / resources中放置了一个文件test.txt用于测试目的,但我无法弄清楚如何从测试中获取此文件。当我只是传递文件名时,我得到FileNotFoundException。 我已经阅读了有关class.getClassLoader()。getResourceAsStream(name)的方法,但是我无法将InputStream而不是filename传递给构造函数,因为我需要多次重新打开文件才能回到开头整个阅读后的文件。不幸的是,第三方CSV阅读器并未将RandomAccessFile作为参数,我没有发明任何更好的解决方案。那么总是有工作方法从Junit Test获取测试/ resources / file.txt的路径吗?
答案 0 :(得分:1)
在运行时,该文件不在测试/资源中。您的构建系统/ IDE会将放在 Jar中,或者放在classes /目录中的某个位置。无论哪种方式,它只能通过类路径访问; getResourceAsStream()
将其抽象出去,以便你应该使用它。
如果真的需要一个文件名(即如果这是一个不可避免的方面,你的班级如何工作 * ),那么你应该考虑使用JUnit&#39 ; @TemporaryFolder
rule;让测试设置将资源文件的内容复制到临时文件中,然后将其名称传递给构造函数。
*这听起来像是一个设计缺陷,你应该考虑重写你的课程来处理抽象。
答案 1 :(得分:0)
我知道这是一个古老的问题,并且有一个答案,但是我知道当您想使用文件路径时,尤其是在通常不打包并交付给用户的JUnit中工作时。
因此,这是我使用Java 8获取JUnit路径的方法。
URL resource = this.getClass().getClassLoader().getResource("Name_of_file.csv");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();