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

时间:2014-08-22 22:48:31

标签: c# .net unit-testing c#-5.0 xunit.net

我正在尝试学习async-await programming modeltesting of async method using 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);
    } 

我为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));
    }

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

await Task.Delay(Delay);

,第二位

Thread.Sleep(10000);

,第三名

Assert.Equal(expected,Convert.ToDouble(actual));

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

1 个答案:

答案 0 :(得分:6)

将您的async void测试方法更改为async Task方法。正如我在MSDN文章中所描述的那样avoid async void