我創(chuàng)建了一個 xUnit 測試,該測試調用了一個方法兩次,以確保第二次調用引發(fā)異常,指出類實例正忙。非常簡單。[Fact]public async Task RunTwice() { var P = Create(); Task T1 = Task.Run(() => P.Run("test", null)); Task T2 = Task.Run(() => P.Run("test", null)); await Assert.ThrowsAsync<InvalidOperationException>(() => Task.WhenAll(new Task[] { T1, T2 }));}問題是,此測試將隨機成功或失??!Run 方法按如下方式啟動public IProcess WorkProcess;private readonly object lockToken = new object();public virtual CompletionStatus Run(string fileName, string arguments) { IProcess P; lock (lockToken) { if (WorkProcess != null) throw new InvalidOperationException(); P = factory.Create(); WorkProcess = P; }...這是在xUnit中購買還是我做錯了什么?我知道在xUnit 1.9中添加了異步支持。我使用的是 v2.4.1。當我查看調試信息時,當測試失敗時,仍然會引發(fā)異常。
1 回答

慕桂英4014372
TA貢獻1871條經(jīng)驗 獲得超13個贊
看起來你做錯了什么。 只是將工作安排到線程池。也許他們會試圖同時打電話,也許一個接一個地發(fā)生。在你試圖做的事情中,有一個固有的競爭條件。Task.Run
Run
為了解決這個問題,你需要一些方法讓單元測試來控制其中的代碼并“暫?!彼?。Run
- 1 回答
- 0 關注
- 76 瀏覽
添加回答
舉報
0/150
提交
取消