因此,我进行了如下测试:

    [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/

10-12 01:15