仅为一种方法重定向控制台输出

时间:2014-09-29 08:26:48

标签: c# console output

我这里有一堆单元测试。其中一个人希望代码什么也不做,因为参数解析不起作用。

不幸的是,在这种情况下解析库的参数使用强制Console.Write(),现在我的单元测试输出充满了库的消息,这使得它很难阅读。 / p>

在调用此方法之前,有没有办法将标准控制台输出重定向到空(或临时文件或其他),然后在完成后将其重定向回标准输出?

谢谢!

更新

实际上它是需要重定向的错误输出......

2 个答案:

答案 0 :(得分:9)

是的,您可以使用自定义输出流临时替换输出流。可以使用Console.SetOut()方法完成。或多或少(适应您的实际代码,另见评论):

// We're not interested in its output, a NULL fake one may also work (better)
Console.SetOut(new StringWriter());

// Your code here...

// Now you have to restore default output stream
var standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);

更新:根据您的更新(标准错误流的重定向),您只需将*Out替换为*Error

Console.SetError(new StringWriter());

// Your code here...

var standardError = new StreamWriter(Console.OpenStandardError());
standardError.AutoFlush = true;
Console.SetError(standardError);

答案 1 :(得分:7)

您可以创建无效的TextWriter

public sealed class NulTextWriter: TextWriter
{
    public override Encoding Encoding
    {
        get
        {
            return Encoding.UTF8;
        }
    }
}

然后您可以像这样设置和恢复控制台输出:

Console.WriteLine("Enabled");

var saved = Console.Out;
Console.SetOut(new NulTextWriter());
Console.WriteLine("This should not appear");

Console.SetOut(saved);
Console.WriteLine("Restored");

您可以对控制台的错误输出使用相同的方法:

Console.Error.WriteLine("Enabled");

var saved = Console.Error;
Console.SetError(new NulTextWriter());
Console.Error.WriteLine("This should not appear");

Console.SetError(saved);
Console.Error.WriteLine("Restored");