Svi*_*ish 5 c# events multithreading nunit
我正在考虑如何测试多线程的东西,但不太确定如何开始.我相信如果我能把事情搞定,我会更容易找到更多的东西,所以我想知道是否有人可以帮助我为这个简单的类编写一个NUnit测试用例:
class Worker
{
public event EventHandler<EventArgs> Done = (s, e) => { };
public void StartWork()
{
var thread = new Thread(Work) { Name = "Worker Thread" };
thread.Start();
}
private void Work()
{
// Do some heavy lifting
Thread.Sleep(500);
Done(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
我想测试的只是:Done事件完成时是否会引发事件.如果它是同步的话我会没有问题,但是当它不是时,我不知道哪里开始.一个简单的测试,如果它不是多线程的(并且该Work方法不是私有的)可能是:
[TestFixture]
class WorkerTests
{
[Test]
public void DoWork_WhenDone_EventIsRaised()
{
var worker = new Worker();
var eventWasRaised = false;
worker.Done += (s, e) => eventWasRaised = true;
worker.Work();
Assert.That(eventWasRaised);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?
您需要使用ManualResetEvent - 有关详细信息,请参阅单元测试多线程异步事件.
就像是:
[Test]
public void DoWork_WhenDone_EventIsRaised()
{
var worker = new Worker();
var eventWasRaised = false;
var mre = new ManualResetEvent(false);
worker.Done += (s, e) => { eventWasRaised= true; mre.Set(); };
worker.Work();
mre.WaitOne(1000);
Assert.That(eventWasRaised);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |