将标准输出重定向到List <string>或Stream

时间:2017-04-06 04:45:07

标签: c# unit-testing output

我正在为以下方法编写测试代码:

public static void PrintAll<T>(this IEnumerable<T> collection)
{
    foreach (T item in collection)
    {
        Console.Write(item.ToString());
    }
}

基本上我认为需要做的是我可以使用随机数据填充数组,使用此方法输出,将其存储在流/集合中,然后使用标准foreach循环输出它并比较两者。

我知道Console.Write()实际上并没有写入它写入应用程序标准输出的控制台。

我知道如何将其重定向到其他Process个对象,但不知道如何重定向我自己的应用程序的标准输出,任何想法?

1 个答案:

答案 0 :(得分:3)

您可以使用init(key:​ascending:​)临时将控制台的输出设置为字符串。

例如:

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
// Save the standard output.
TextWriter tmp = Console.Out;
Console.SetOut(sw);
// Code which calls Console.Write
Console.SetOut(tmp);
string actual = sb.ToString();

请记住处置StringWriter对象。