我正在启动一个进程并重定向错误流,以便能够解析它并知道发生了什么。我是这样做的:
_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"));