我正在启动一个进程并重定向错误流,以便能够解析它并知道发生了什么。我是这样做的:

_proc.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler);

其中neterrordatahandler具有以下签名:
private void NetErrorDataHandler(object sendingProcess, DataReceivedEventArgs errLine)

到目前为止,我必须使用datareceivedeventargs,但我不确定如何测试它。目前我正在运行我正在使用的进程。你不能用额外的数据创建datareceivedeventargs的实例,那么我该如何克服这个障碍呢?我现在看到的唯一方法是创建一个流程来为我做这项工作。但是,这不是测试的最佳选择。

最佳答案

您的应用程序在datareceivedeventargs外使用哪些数据?
最好的解决方案可能是将datareceivedeventargs包装为一个类,您可以将数据注入该类进行测试,然后将其传递给实现方法,而不是在当前事件处理程序中执行所有工作。
让我给你看。首先,创建自定义包装类:

internal class CustomDataReceivedEventArgs : EventArgs
{

    public string Data { get; set; }


    public CustomDataReceivedEventArgs(string _Data)
    {
        Data = Data;
    }

    public CustomDataReceivedEventArgs(DataReceivedEventArgs Source)
    {
        Data = Source.Data;
    }
}

接下来,将事件处理程序实现移到新方法中:
    private void NetErrorDataHandler_Implementation(object sendingProcess,
        CustomDataReceivedEventArgs errLine)
    {
        //Your actual event handling implementation here...
    }

最后,将事件处理程序设置为只调用新方法:
    private void NetErrorDataHandler(object sendingProcess,
        DataReceivedEventArgs errLine)
    {
        NetErrorDataHandler_Implementation(sendingProcess,
            new CustomDataReceivedEventArgs(errLine));
    }

现在,您可以这样调用实现来测试实现:
        NetErrorDataHandler_Implementation(new object(),
            new CustomDataReceivedEventArgs("My Test Data"));

08-06 02:21