2
我正在對一個組件進行單元測試,該組件可以處理任意數量的線程並在這些線程上引發事件。我寫了我使用斷言,我期待的事件已經提出了一個簡單的事件寄存器:多線程應用程序中的單元測試事件
public class EventRegister
{
private readonly object _lock = new object();
public int Count { get; private set; }
public void Increment()
{
lock (_lock)
{
Count++;
Monitor.Pulse(_lock);
}
}
public static EventRegister operator ++(EventRegister counter)
{
counter.Count++;
return counter;
}
public static implicit operator int(EventRegister counter)
{
return counter.Count;
}
public bool HasFired { get { return Count > 0; } }
public void Wait(int unitCount)
{
Wait(unitCount, TimeSpan.MinValue);
}
public void Wait(int unitCount, TimeSpan timeout)
{
lock (_lock)
{
var start = DateTime.Now;
while (Count < unitCount)
{
if (timeout != TimeSpan.MinValue && !Debugger.IsAttached)
{
Monitor.Wait(_lock, timeout);
if (DateTime.Now-start>timeout)
throw new TimeoutException();
}
else
Monitor.Wait(_lock);
}
}
}
}
這工作得很好,我足以與它高興,但我重新發明輪子呢? NUnit或MOQ(或任何其他lib)是否已經包含一些其他機制來執行相同的操作?
你開始了,我會加入你,在BitBucket上見你? https://bitbucket.org/mylesmcdonnell – 2012-02-06 21:04:14