上飛

2010-02-05 21 views
2

創建CSV文件作爲一個StreamReader我想單元測試下面的方法上飛

​​

的StreamReader的需要在CSV格式的文件,特別是列名。

是否有可能在代碼中創建這樣的文件,而不是在每個單元測試的文件系統上都有很多文件?

任何想法?

UPDATE:

才意識到我使用Linq2Csv庫中,有整整做這個

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

回答

1

肯定的:

var buffer = Encoding.Default.GetBytes("ab;cd;ef"); 
using (var stream = new MemoryStream(buffer)) 
using (var reader = new StreamReader(stream)) 
{ 
    var actual = GetData<SomeClass>(reader); 
    // TODO: assert on actual 
} 
1

在您的測試方法,你可以傳遞方法的StreamReader從一個MemoryStream讀而不是從文件或FileStream。反過來,MemoryStream可以在測試安排期間填充類似文件內容的內容。

1

理想的情況下,簽名改爲:

public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new() 

然後你就可以在StringReader傳真的很容易。

替代方案:

  • 中嵌入測試裝配示例文件,從
  • 使用Encoding.GetBytes(text)Assembly.GetManifestResourceStream()取流,並創建一個StreamReader並在MemoryStream包裹的結果,然後建立了一個StreamReader的

對於簡短的測試,我會去與StringReader版本。有關更多數據,將文件嵌入測試組件中效果非常好。