所以我有一个类似下面的测试:

    [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()在上述场景中不起作用,它的用途是什么?

推荐答案

你应该知道结果(见xunit's acceptance tests).

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

在这个特定的退化 case 中,您可以只使用Assert.ThrowsAsync生成的Task中的return,而不使用await,但关键是您需要将生成的Task交还给xUnit框架,也就是说,您需要将生成的Task返回给xUnit框架.

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

.net相关问答推荐

Long.MaxValue从Single到Long的转换导致溢出异常

无法在Designer、VS2022、. NET 8中打开WinForms表单'

如何按需计算一个值并将该值缓存在FP/F#中?

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

在.NET C#中截断整个单词的字符串

移位比Java中的乘法和除法更快吗? .网?

发布版本中的 Debug.WriteLine

BackgroundWorker 中未处理的异常

图像与位图类

在 C# 中将匿名类型转换为键/值数组?

.net 自定义配置如何不区分大小写解析枚举 ConfigurationProperty

如何在 C# 中安全地将 System.Object 转换为bool?

将 StreamReader 返回到开头

将字典值转换为数组

什么是 .NET 应用程序域?

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

如何从文件中删除单个属性(例如只读)?

如何在 C# 中使用迭代器反向读取文本文件

Dictionary.Add 与 Dictionary[key]=value 的区别

如何在我的机器上找到 fuslogvw.exe?