我正在如何測試多線程的東西,但我不知道如何開始。我敢肯定,我將人物更多的東西出來容易,如果我能得到的東西去,所以我想知道,如果有人可以幫我寫一個NUnit測試案例這個簡單的類:C#:如何測試一個基本的線程工人類
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);
}
}
我想測試很簡單: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);
}
}
任何指針?
eventRaisedFlag可以省略。使用事件作爲標誌更簡單。 Assert.That(mre.WaitOne(1000)); – 2009-11-20 14:50:16
哦,現在很聰明...輝煌! @Vadmyst:如果說事件在您調用WaitOne之前設法完成,那麼這將如何工作? – Svish 2009-11-20 16:28:56
哦,我想這就是爲什麼你會使用ManualResetEvent而不是AutoResetEvent? – Svish 2009-11-26 18:47:43