我正在尝试生成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());
}
答案 0 :(得分:2)
通常,当您在调试中单步执行代码时,所有线程都会停止,所以是的,这是正常的。
我建议使用ManualResetEvent
或类似内容,以确保您的线程按预期开始和停止;否则,测试运行员会认为测试已完成,而线程(在后台)仍然正在愉快地工作。单元测试多线程代码很难。