Dot-Net

xunit Assert.ThrowsAsync() 不能正常工作?

  • November 27, 2016

所以我有一個如下測試:

   [Fact]
   public void Test1()
   {
       Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
   }

   private async Task MethodThatThrows()
   {
       await Task.Delay(100);
       throw new NotImplementedException();
   }

令我驚訝的是,Test1 成功通過了。為了讓它失敗,我必須這樣寫:

Assert.Throws<ArgumentNullException>(() => MethodThatThrows().Wait());

如果 ThrowsAsync() 在上述場景中不起作用,它的目的是什麼?

你應該await得到結果(參見xunit 的驗收測試)。

[Fact] public async Task Test1()
{
   await Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
}

在這種特定的退化情況下,您可以不使用而只產生returnTask但關鍵是您需要將結果交還給 xUnit 框架,即Assert.ThrowsAsync``await``Task

[Fact]
public Task Test1() =>
   Assert.ThrowsAsync<ArgumentNullException>(MethodThatThrows);

引用自:https://stackoverflow.com/questions/40828272