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

tho*_*asb 4 c# console output

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

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

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

谢谢!

更新

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

Adr*_*tti 10

是的,您可以使用自定义输出流临时替换输出流.可以使用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);
Run Code Online (Sandbox Code Playgroud)

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

Console.SetError(new StringWriter());

// Your code here...

var standardError = new StreamWriter(Console.OpenStandardError());
standardError.AutoFlush = true;
Console.SetError(standardError);
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 9

你可以创建一个TextWriter什么都不做的事:

public sealed class NulTextWriter: TextWriter
{
    public override Encoding Encoding
    {
        get
        {
            return Encoding.UTF8;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Console.WriteLine("Enabled");

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

Console.SetOut(saved);
Console.WriteLine("Restored");
Run Code Online (Sandbox Code Playgroud)

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

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");
Run Code Online (Sandbox Code Playgroud)