在JUnit测试中读取资源文件

时间:2016-11-20 22:56:52

标签: java junit

我在单元测试中读取文本文件,并在资源文件夹中放置了一些输入文本文件。以下是目录结构。

  
      
  • src - > com - > au - > myapp - > util - > MyFileReader
  •   
  • 测试 - > com - > au - > myapp - > util - > MyFileReaderTest
  •   
  • 测试 - > com - > au - > myapp - >资源 - > input.txt中
  •   

请注意,src和test属于同一层次结构。

public class MyFileReaderTest
{

  ClassLoader classLoader = getClass().getClassLoader();

  @Test
  public void testReadInputFile() throws Exception
  {
    String file = classLoader.getResource("test/com/au/myapp/resources/input.txt").getFile();
    List<String> result = InputFileReader.getInstance().readFile(file);
    assertEquals("Size of the list should be 2", 2, result.size());
  }
}

Classloader.getResource()返回null。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

类加载器使用类路径加载资源。您的类很可能位于包com.au.myapp.util中。不在包test.com.au.myapp.util中。

目录结构与包结构匹配。这意味着目录src和test都是源根。

由于您的文件位于源根目录下的com/au/myapp/resources目录中,因此其包名为com.au.myapp.resources

所以你需要

classLoader.getResource("com/au/fitbits/resources/input.txt");

这是从类路径加载的资源。它现在可能是一个文件,因为您处于开发模式,并且直接从文件系统加载类。但是一旦投入生产,它们就不再从文件系统加载,而是从jar文件中加载。因此,您无法使用文件IO来读取此资源的内容。所以使用

classLoader.getResourceAsStream("com/au/fitbits/resources/input.txt")

并从此流中读取。