我这里有一堆单元测试.其中一个人希望代码什么也不做,因为参数解析不起作用.
不幸的是,解析库的参数我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)
你可以创建一个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)