对象在单元测试中生成线程

问题描述 投票:0回答:1

我正在尝试生成2个线程,一个用于将一些数据流式传输到多播地址,另一个是正在测试的实际代码,它监视多播地址并告诉我某些内容是否正在流式传输。

monitor.StartMonitoring();streamer.SendData();基本上在一个长期运行的线程中运行来自各自类的私有方法。这些线程的行为如前所述。

我看到了奇怪的行为,如果我在调试模式下运行测试并逐行运行代码,我发现在运行Thread.Sleep(5000)之前没有任何反应。当它到达Thread.Sleep()时,我看到多播地址上的流量,如果我检查UdpMonitor类,我看到它具有多播地址的最新状态值(它表示它确实是流式传输)。好像其他线程被测试线程阻止运行。这是正常的吗?

[TestMethod]
public void UdpMonitorTest_Typical()
{
   var monitor = new UdpMonitor(multicastIp, nicIp, monitorNicPort);
   monitor.StartMonitoring();

   var streamer = new UdpDummyStreamer(multicastIp, nicIp, dummyNicPort, multicastPort);
   streamer.SendData();

   Thread.Sleep(5000);

   Assert.AreEqual(BroadcastEndpointStatus.Streaming, monitor.GetEndpointStatus());
}
c# .net multithreading
1个回答
2
投票

通常,当您在调试中单步执行代码时,所有线程都会停止,所以是的,这是正常的。

我建议使用ManualResetEvent或类似的,以确保您的线程按预期开始和停止;否则,测试运行员会认为测试已完成,而线程(在后台)仍然正在愉快地工作。单元测试多线程代码很难。

© www.soinside.com 2019 - 2024. All rights reserved.