gpt4 book ai didi

.net - 多线程应用程序中的单元测试事件

转载 作者:行者123 更新时间:2023-12-03 13:05:26 26 4
gpt4 key购买 nike

我正在对可以在任何数量的线程上工作并在这些线程上引发事件的组件进行单元测试。我编写了一个简单的事件寄存器,用于断言我期望的事件已引发:

    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(或任何其他库)是否已经包含用于执行相同操作的其他机制?

最佳答案

要回答您的2个问题:

  • 您已经重新发明了轮子。我自己发明的车轮模型并不完全相同,但是却非常相似。我敢肯定,很多其他人也在其他​​地方重新发明了这种轮子。
  • Moq不提供这种功能,MSTest也没有。上一次我使用NUnit时,它没有提供它。

  • 似乎一遍又一遍地编写了许多基于事件的多线程样板代码。也许是时候构建与框架无关的线程和事件帮助程序库了……

    关于.net - 多线程应用程序中的单元测试事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140535/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com