Specflow步骤与等待异步API

本文关键字:异步 API 等待 Specflow | 更新日期: 2023-09-27 18:13:10

我们试图得到以下场景步骤,以在DoAyncStuff()方法中发生失败时中断测试:

[Given(@"There is something")]
public async Task GivenSomething()
{
    await DoStuff();
}
private async Task DoStuff()
{
    await Task.Run(() => Thread.Sleep(1000));
    throw new ApplicationException("Boom");
}

但它实际上是一个快乐的绿色运行,直到你使用.Wait().Result:

[Given(@"There is something")]
public void GivenSomething()
{
    DoStuff().Wait();
}

问题似乎在NUnit生成规范中,它看起来像这样:

public virtual void SomethingAsync()
{
    ...
    testRunner.Given("There is something", ...);
    ...
}

似乎与以下代码一起工作:

public virtual async Task SomethingAsync()
{
    ...
    await this.ScenarioSetup(scenarioInfo);
    ...
}

上面的代码是手动编辑的自动生成的文件,所以我实际上是在寻找一种方法来自动生成以下代码。

文档似乎是异步API的唯一选择,但它实际上是Silverlight的,据我所知,它使用了某种API,而我们更喜欢使用原生c# await关键字。

是否有一种方法来处理原生async/await是SpecFlow步骤?

Specflow步骤与等待异步API

在当前发布的版本(2.1)中不支持async和await,在v2.2中添加了支持(通过合并的PR),可以从CI服务器获得,但还没有正式发布。

[编辑]

2.2已经发布,并且在测试中支持async await。