【发布时间】:2010-10-26 18:48:14
【问题描述】:
我有一个外部库,它有一个在后台线程上执行长时间运行任务的方法。完成后,它会在启动该方法的线程(通常是 UI 线程)上触发 Completed 事件。它看起来像这样:
public class Foo
{
public delegate void CompletedEventHandler(object sender, EventArgs e);
public event CompletedEventHandler Completed;
public void LongRunningTask()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(5000);
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (Completed != null)
Completed(this, EventArgs.Empty);
}
}
调用这个库的代码如下所示:
private void button1_Click(object sender, EventArgs e)
{
Foo b = new Foo();
b.Completed += new Foo.CompletedEventHandler(b_Completed);
b.LongRunningTask();
Debug.WriteLine("It's all done");
}
void b_Completed(object sender, EventArgs e)
{
// do stuff
}
如果 .LongRunningTask 在事件中返回数据,我该如何对它的调用进行单元测试?
【问题讨论】:
标签: c# multithreading unit-testing events