在同一过程中写入标准错误后是否可以读取标准错误?

时间:2014-09-05 16:27:05

标签: c#

这是我试过的,但错误==“”

var streamReader = new StreamReader(Console.OpenStandardError());
Console.Error.WriteLine("An error has occurred");
Console.Error.Flush();
string error = streamReader.ReadToEnd();

目的是我需要为写入标准错误的类编写测试。我想检查写入的错误是否正确,但理想情况下我不想修改类本身。

1 个答案:

答案 0 :(得分:0)

我发现的一种方式。将Console.Error设置为扩展的TextWriter,用于拦截正在写入的文本。我只是覆盖了WriteLine(字符串),因为这就是我所需要的。

TextWriter oldWriter = Console.Error;
ErrorCapturer errorCapturer = new ErrorCapturer();
Console.SetError(errorCapturer);
Console.Error.WriteLine("An error has occured");
string error = errorCapturer.ReadToEnd();
Console.SetError(oldWriter);

class ErrorCapturer : TextWriter
{
    string _buffer="";
    public override void WriteLine(string line)
    {
        _buffer += line + Environment.NewLine;
        base.WriteLine(line);
    }

    public string ReadToEnd()
    {
        string ret = _buffer;
        _buffer = "";
        return ret;
    }

    public override Encoding Encoding
    {
        get { return Encoding.ASCII; }
    }
}