Я тестирую модуль, который работает с любым количеством потоков и вызывает события в этих потоках.Я написал простой регистр событий, который я использую, чтобы утверждать, что события, которые я ожидаю, были вызваны:
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 (или любая другая библиотека) уже включают какой-то другой механизм для того же самого?