2017-06-02 71 views
0

我想測試從文件讀取和寫入文件功能。我的問題是這些功能沒有任何參數。直到現在,我只用文件作爲參數測試了這種功能。我已經通過其他questins看,發現這些:How to unit test a method that reads a given file,How to test write to file in Java?但他們並沒有真正幫助我。我想OT試驗的代碼是:測試寫入文件並從不帶參數的文件讀取

public void loadData() 
    { 
     try(BufferedReader br=new BufferedReader(new FileReader(super.fileName))){ 
      String line; 
      while((line=br.readLine())!=null){ 
       String[] atributes=line.split(";"); 
       if(atributes.length!=4) 
        throw new Exception("Linia nu este valida!"); 
       Student t=new Student(atributes[0],atributes[1],atributes[2],atributes[3]); 
       super.save(t); 

      } 
      Thread.sleep(5000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public synchronized void writeToFile() { 
     try (BufferedWriter br = new BufferedWriter(new FileWriter(super.fileName))){ 
      super.entities.forEach(x -> { 
       try { 
        br.write(x.studentFileLine()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

任何人都可以給我一個如何測試這個沒有文件參數提示?

+1

您提到的帖子解釋了一個重要的觀點:讓您的代碼可測試。無法設置文件參數進行測試不會使代碼可測試。如果你想保持代碼不可測試,你可能會得到一種依靠不良實踐的方式。 – davidxxx

+0

如何分配'super.fileName'? – slim

+0

順便說一句,「屬性」中有一個雙「t」。我只是指出這一點,因爲它在這個來源中經常重複。 – slim

回答

0

如果您無法更改現有方法的簽名,請添加一個新方法,該方法不接受參數,並將現有方法更改爲委派給新方法。

@Deprecated 
public void loadData() { 
    loadData(super.fileName); 
} 

public void loadData(String fileName) { 
    // do stuff 
} 

@Deprecated 
public synchronized void writeToFile() { 
    writeToFile(super.fileName); 
} 

public synchronized void writeToFile(String fileName) { 
    // do stuff 
} 
相關問題