【问题标题】:Assert statement is never executed in async test断言语句永远不会在异步测试中执行
【发布时间】:2014-08-22 22:48:31
【问题描述】:

我正在努力学习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));

调试器按预期命中前两点,但从未命中第三个断点。不寻常的是,即使我确定失败了,测试也通过了。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      相关资源
      最近更新 更多