2016-11-20 1213 views
1

我在單元測試中讀取文本文件,並在資源文件夾中放置了一些輸入文本文件。以下是目錄結構。在JUnit測試中讀取資源文件

  • SRC - > COM - > AU - >的myapp - >的util - > MyFileReader
  • 測試 - > COM - > AU - >的myapp - >的util - > MyFileReaderTest
  • 測試 - >玉米 - >非盟 - > MYAPP - >資源 - > input.txt中

注意,src和測試都在同一層次。

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

請看看它,如果你可以找到相對路徑使用.class http://stackoverflow.com/questions/6608795/what-is-the-difference-between-class-getresource-and-classloader-getresource –

+1

如果'資源「文件夾位於類路徑中,那麼您可以使用Class類的'getResourceAsStream()'方法。 –

回答

5

類加載器使用類路徑加載資源。你的課程很可能在包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"); 

這是一種資源,從classpath加載。它現在可能是一個文件,因爲您處於開發模式,並且類直接從文件系統加載。但是一旦生產完成,它們將不再從文件系統中加載,而是從jar文件中加載。所以你不能使用文件IO來讀取這個資源的內容。因此請使用

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

並從此流讀取。

+0

非常感謝。是的,它的工作。但是,我不得不 - > file.substring(1) – Anuruddha