創建CSV文件作爲一個StreamReader我想單元測試下面的方法上飛
的StreamReader的需要在CSV格式的文件,特別是列名。
是否有可能在代碼中創建這樣的文件,而不是在每個單元測試的文件系統上都有很多文件?
任何想法?
UPDATE:
才意識到我使用Linq2Csv庫中,有整整做這個
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
創建CSV文件作爲一個StreamReader我想單元測試下面的方法上飛
的StreamReader的需要在CSV格式的文件,特別是列名。
是否有可能在代碼中創建這樣的文件,而不是在每個單元測試的文件系統上都有很多文件?
任何想法?
UPDATE:
才意識到我使用Linq2Csv庫中,有整整做這個
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
肯定的:
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
}
在您的測試方法,你可以傳遞方法的StreamReader
從一個MemoryStream
讀而不是從文件或FileStream
。反過來,MemoryStream
可以在測試安排期間填充類似文件內容的內容。
理想的情況下,簽名改爲:
public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new()
然後你就可以在StringReader
傳真的很容易。
替代方案:
Encoding.GetBytes(text)
與Assembly.GetManifestResourceStream()
取流,並創建一個StreamReader
並在MemoryStream
包裹的結果,然後建立了一個StreamReader的對於簡短的測試,我會去與StringReader
版本。有關更多數據,將文件嵌入測試組件中效果非常好。