Assert语句永远不会在异步测试中执行

Dar*_*nik 0 .net c# unit-testing xunit.net c#-5.0

我正在尝试学习async-await编程模型使用XUnit.net 1.9.2测试异步方法.我写了一个简单的WCF服务CalculatorService,它实现了基本的数学运算.我使用async-await模型来实现这些操作.添加功能如下:

public async Task<double> AddAsync(double n1, double n2)
    {
        // Mimicking time consuming work
        await Task.Delay(Delay);
        return (n1 + n2);
    } 
Run Code Online (Sandbox Code Playgroud)

我为AddAsync函数编写了一个测试用例.测试用例如下:

    [Fact]
    public async void ShouldAddAsync()
    {
        var calculatorSerivce = new CalculatorService();

        var result = calculatorSerivce.AddAsync(1, 1);
        // Mimicking independent work.
        Thread.Sleep(10000);

        var actual = await result;

        const double expected = 3;
        Assert.Equal(expected,Convert.ToDouble(actual));
    }
Run Code Online (Sandbox Code Playgroud)

我想调试测试用例,这样我就能理解异步编程模型中的控制流程.我放了三个断点,一个在

await Task.Delay(Delay);
Run Code Online (Sandbox Code Playgroud)

,第二个

Thread.Sleep(10000);

第三个

Assert.Equal(expected,Convert.ToDouble(actual));
Run Code Online (Sandbox Code Playgroud)

调试器按预期达到前两个点但从未达到第三个断点.不寻常的是,尽管我确定了失败,但测试正在通过.

Ste*_*ary 6

async void测试方法更改为async Task方法.正如我在MSDN文章中描述的那样,避免async void.