我想对以下方法进行单元测试
public IEnumerable<T> GetData<T>(StreamReader fileStream) where T : new()
streamreader必须是CSV格式的文件,具有特定的列名。
是否可以在代码中创建此类文件,而不是必须在文件系统上为每个单元测试创建大量文件?
有什么想法吗?
更新:
刚刚实现了我正在使用Linq2Csv的库,有完成这个的方法
答案 0 :(得分:1)
在测试中,您可以传递一个StreamReader
方法,该方法从MemoryStream
而不是文件或FileStream
中读取。反过来,MemoryStream
可以填充测试安排期间类似文件内容的内容。
答案 1 :(得分: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
}
答案 2 :(得分:1)
理想情况下,将签名更改为:
public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new()
然后你可以很容易地传递StringReader
。
备选方案:
Assembly.GetManifestResourceStream()
获取流并从中创建StreamReader
Encoding.GetBytes(text)
并将结果包装在MemoryStream
中,然后构建一个StreamReader 对于简短测试,我会使用StringReader
版本。对于更多数据,在测试程序集中嵌入文件非常有效。
答案 3 :(得分:0)