【发布时间】:2012-02-04 11:33:14
【问题描述】:
我正在对一个组件进行单元测试,该组件可以在任意数量的线程上工作并在这些线程上引发事件。我编写了一个简单的事件寄存器,我用它来断言我期望的事件已经被引发:
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(或任何其他库)是否已经包含一些其他机制来做同样的事情?
【问题讨论】:
标签: .net multithreading unit-testing nunit moq