using Xunit.Abstractions; namespace MultiThreadingStudy.xUnitTest { public class ThreadTest:IDisposable { private readonly ITestOutputHelper _output; public ThreadTest(ITestOutputHelper testOutput) { _output = testOutput; } /// /// 测试方法的启动线程为后台线程 /// 结论:在测试方法中新启动的线程(即使设置成前台线程),默认情况下,不能阻止单元测试方法的执行结束。 /// 测试方法很可能先于新启动的线程结束运行,造成新线程没有执行完就随着测试方法线程结束而结束。 /// [Fact] public void TestRunThread_Test() { _output.WriteLine($"主线程Id={Thread.CurrentThread.ManagedThreadId}, 是否后台线程={Thread.CurrentThread.IsBackground}"); //断言:测试的启动线程为后台线程 Assert.True( Thread.CurrentThread.IsBackground); } /// /// /// [Fact] public void Test1() { _output.WriteLine($"主线程Id={Thread.CurrentThread.ManagedThreadId}, 是否后台线程={Thread.CurrentThread.IsBackground}"); Thread t = new Thread(() => { _output.WriteLine($"新线程Id={Thread.CurrentThread.ManagedThreadId}, 新线程名称={Thread.CurrentThread.Name}"); _output.WriteLine($"{Thread.CurrentThread.Name} 新线程,开始休眠"); Thread.Sleep(100); _output.WriteLine($"{Thread.CurrentThread.Name} 新线程从休眠中唤醒,执行结束!"); }) { Name = "FirstThread", Priority = ThreadPriority.Normal, IsBackground = false, }; t.Start(); t.Join(); } public void Dispose() { } } }