2014-06-30 166 views
0

我是junit測試的新手,我想寫單元測試。其實這些方法不會返回任何東西。它將信號列表寫入一個csv文件。我不知道如何用void返回類型測試方法。使用JUnit測試寫入csv文件

任何人都可以幫到我嗎?

public void createCSV (final ArrayList<Signal> messages, File file) 
{ 
    try 
    { 
     // Use FileWriter constructor that specifies open for appending 
     csvOutput = new MyWriter(new FileWriter(file, false), ','); 

     // Create Header for CSV 
     csvOutput.writeRecord("Message Source"); 
     csvOutput.writeRecord("Message Name"); 
     csvOutput.writeRecord("Component"); 
     csvOutput.writeRecord("Occurance"); 
     csvOutput.writeRecord("Message Payload with Header"); 
     csvOutput.writeRecord("Bandwidth(with Header %)"); 
     csvOutput.writeRecord("Message Payload"); 
     csvOutput.writeRecord("Bandwidth(%)"); 
     csvOutput.endOfRecord(); 

     for (Signal signal : messages) 
     { 
      csvOutput.writeRecord(signal.getSource()); 
      csvOutput.writeRecord(signal.getName()); 
      csvOutput.writeRecord(signal.getComponent()); 
      csvOutput.writeRecord(Integer.toString(signal.getOccurance())); 
      csvOutput.writeRecord(Integer.toString(signal 
       .getSizewithHeader())); 
      csvOutput.writeRecord(Float.toString(signal 
       .getBandwidthWithHeader())); 
      csvOutput.writeRecord(Integer.toString(signal.getSize())); 
      csvOutput.writeRecord(Float.toString(signal.getBandwidth())); 
      csvOutput.endOfRecord(); 
     } 
    } 
    catch (IOException e) 
    { 
     logger.error("Error in writing CSV file for messages", e); 
    } 
    finally 
    { 
     try 
     { 
      if (csvOutput != null) 
      { 
       csvOutput.flush(); 
       csvOutput.close(); 
      } 
      messages.clear(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 
} 
+0

http:// stackoverflow可能存在重複。問題/ 3381801 /如何做我的單元測試保存文件到磁盤 – Raedwald

回答

1

的文件單元測試

如果你不想要的改變src代碼:

在單元測試中,我將一個文件傳遞到一個臨時路徑,呼叫建立CSV方法和 然後打開多少努力的文件和dependendent你想投資:

檢查
1)如果文件存在(使用的文件名generea泰德包含當前時間)
2)檢查該長度大於0字節
3)讀出的第一行和最後一行,並檢查其預期內容

但在大多數情況下,OutputStream比更靈活一個File參數。
在生產性代碼中,您通過FileOutputStream,在您的單元測試中使用ByteArrayOutputStream,您可以使用ByteArrayInputStream進行解析。

這是更清潔的解決方案,因爲它不會創建應該清理的文件,而且運行速度更快。

單元測試排序 只需創建一個未排序的地圖。排序打電話給你,並檢查結果進行排序: 迭代,並檢查各下一個元素是(根據排序順序或更小)

只是

3

一個需要比之前的如更大映射並對其進行分類。

傳入具有已知未排序值的地圖。在調用方法後驗證地圖是否已排序。

另一個將已排序的地圖寫入一個csv文件。我不知道如何用void返回類型測試方法。

兩個選項:

  1. 傳遞一個臨時文件的路徑,例如請參閱JUnit temporary folders,然後在調用該方法後讀取該文件並測試其是否正確。

  2. 調整您的方法以接受OutputStream而不是File。然後您可以通過ByteArrayOutputStream並通過調用toByteArray()並檢查字節來驗證其內容。

+0

好吧我創建了一個具有未分類值的地圖,我調用傳遞該地圖的方法如何驗證地圖是現在排序爲方法不會返回排序映射 – Wearybands

+0

@UmairIqbal無論是手工製作一個有排序的映射並比較兩者,還是使用您信任的現有排序方法(例如來自JDK)對映射進行排序並進行比較。 –

+0

我的問題是我有兩個地圖完全相同的內容一個排序,另一個未排序我將未排序的地圖傳遞給排序地圖的方法。我怎樣才能比較他們?我需要任何斷言嗎?怎麼樣? – Wearybands