我需要为一个方法编写一个单元测试,该方法采用来自文本文件的流。我想做这样的事情:
Stream s = GenerateStreamFromString("a,b \n c,d");
我需要为一个方法编写一个单元测试,该方法采用来自文本文件的流。我想做这样的事情:
Stream s = GenerateStreamFromString("a,b \n c,d");
当前回答
使用MemoryStream类,调用Encoding。GetBytes首先将字符串转换为字节数组。
您随后是否需要流上的TextReader ?如果是这样,您可以直接提供一个StringReader,并绕过MemoryStream和Encoding步骤。
其他回答
ToStream扩展方法的现代化和轻微修改版本:
public static Stream ToStream(this string value) => ToStream(value, Encoding.UTF8);
public static Stream ToStream(this string value, Encoding encoding)
=> new MemoryStream(encoding.GetBytes(value ?? string.Empty));
修改建议在@Palec的评论@肖恩鲍威的回答。
或者作为一行语句(由@satnhak建议):
public static Stream ToStream(this string value, Encoding encoding = null)
=> new MemoryStream((encoding ?? Encoding.UTF8).GetBytes(value ?? string.Empty));
我们使用下面列出的扩展方法。我认为您应该让开发人员对编码做出决定,这样就不会有什么神奇的事情发生。
public static class StringExtensions {
public static Stream ToStream(this string s) {
return s.ToStream(Encoding.UTF8);
}
public static Stream ToStream(this string s, Encoding encoding) {
return new MemoryStream(encoding.GetBytes(s ?? ""));
}
}
使用MemoryStream类,调用Encoding。GetBytes首先将字符串转换为字节数组。
您随后是否需要流上的TextReader ?如果是这样,您可以直接提供一个StringReader,并绕过MemoryStream和Encoding步骤。
我使用了如下的混合答案:
public static Stream ToStream(this string str, Encoding enc = null)
{
enc = enc ?? Encoding.UTF8;
return new MemoryStream(enc.GetBytes(str ?? ""));
}
然后我这样使用它:
String someStr="This is a Test";
Encoding enc = getEncodingFromSomeWhere();
using (Stream stream = someStr.ToStream(enc))
{
// Do something with the stream....
}
另一个解决方案:
public static MemoryStream GenerateStreamFromString(string value)
{
return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
}