我正在尝试学习async-await programming model和testing 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));
调试器按预期命中前两个点但从未达到第三个断点。不寻常的是,尽管我确定了失败,但测试正在通过。