我这里有一堆单元测试。其中一个人希望代码什么也不做,因为参数解析不起作用。
不幸的是,在这种情况下解析库的参数使用强制Console.Write()
,现在我的单元测试输出充满了库的消息,这使得它很难阅读。 / p>
在调用此方法之前,有没有办法将标准控制台输出重定向到空(或临时文件或其他),然后在完成后将其重定向回标准输出?
谢谢!
实际上它是需要重定向的错误输出......
答案 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");