因此,我进行了如下测试:
[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's acceptance tests)。
[Fact] public async Task Test1()
{
await Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
}
在这种特定的退化情况下,您可以仅使用
return
即可生成Task
生成的Assert.ThrowsAsync
,而无需使用await
,但是关键是您需要将生成的Task
交还给xUnit框架,即[Fact]
public Task Test1() =>
Assert.ThrowsAsync<ArgumentNullException>(MethodThatThrows);
关于.net - xunit Assert.ThrowsAsync()无法正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40828272/