2014-02-26 58 views
1

我有測試MVN單元測試公共資源文件夾,並讀取文件的功能

test 
/java 
    /com.mycompany 
    test1Test 
    test2Test 
/resources 
    /jsonFiles 
    file1.json 
    file2.json 
在我的每一個測試中,我從相應的輸入JSON文件讀

然後以下目錄結構:

@Test 
public void testFile1() 
{ 
    // read a file from the resources directory 
    myobj = new myObject(); 
    myobj.setFileContentsAsString(test1Test.class.getResourcesAsStream("/jsonFiles/file1.json"); 
} 

我的問題是兩部分:

1)什麼是更好的方式來讀取文件內容W/O必須指定className.getResourceAsStream()是因爲它將被用於多個每個測試類的測試用例。似乎我重用了更好的東西?

2)我在哪裏可以找到文件資源的路徑,而不必硬編碼「jsonFiles」作爲實際文件的前綴?我寧願將其稱爲絕對的(「file1.json」) ;

回答

3

這不是真的特定於mvn。您可以創建超類或測試實用程序類中的方法:

public static InputStream getJsonFileAsStream(String jsonFile) 
{ 
    return ClassLoader.getSystemResourceAsStream("/jsonFiles/" + jsonFile); 
} 

然後,您可以在需要的地方重複使用它。

+0

很簡單,工作得很好。謝謝! – JaJ

2

讀取文件的最佳方法是使用resourceAsStream。但是這裏有一些可以避免在不同的測試用例中寫入同一文件操作的多次讀取的操作。

  1. 撰寫具有

    public class BaseTest{ 
    
    protected myObject myobj; 
    
    @Before 
    public void setUp() { 
        // read a file from the resources directory 
        myobj = new myObject(); 
        myobj.setFileContentsAsString(
           test1Test.class.getResourcesAsStream("/jsonFiles/file1.json"); 
    } } 
    

和所有需要resuse這種方法的類應該那麼現在被稱爲像

public class Test1 extends BaseTest { 

    @Before 
    public void setUp() { 
     super.setUp(); 
    } 
} 

對象一個基礎測試類myobj適用於您只加載一次的所有測試類。

第二個問題是基於要求。

[編輯]

public class BaseTest{ 

    private String filePath; 
    public BaseTest(String filePath) { 
     this.filePath = filePath; 
    } 
    protected myObject myobj; 

    @Before 
    public void setUp() { 
     // read a file from the resources directory 
     myobj = new myObject(); 
     myobj.setFileContentsAsString(
        test1Test.class.getResourcesAsStream("/jsonFiles/" + filePath); 
    } } 

所以基類會迫使其擴展類來創建一個公共構造應通過文件名也。

public class Test1 extends BaseTest { 

    public Test1() { 
     super("file1.json"); 
    } 

    @Before 
    public void setUp() { 
     super.setUp(); 
    } 
} 

public class Test2 extends BaseTest { 

    public Test2() { 
     super("file2.json"); 
    } 

    @Before 
    public void setUp() { 
     super.setUp(); 
    } 
} 

這樣,每個測試文件都可以傳遞不同的文件名。

希望這可以幫助

+0

thx,如何重複使用多個文件和測試類? test1Test的file1.json,test2Test的file2.json?你看起來像它只支持一個實例或許多BaseTest類? – JaJ

+0

編輯我的答案,納入 – VinayVeluri

+0

真棒,謝謝! – JaJ