Specflow步骤等待异步API

时间:2016-10-14 00:12:55

标签: c# async-await nunit bdd specflow

如果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 generated-spec中,如下所示:

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

似乎可以使用以下代码:

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

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

The documentation似乎是asyncronous API唯一可用的选项,但它实际上适用于Silverlight,据我所知使用某种API,而我们更喜欢使用本机C#await关键字。

有没有办法本地处理async/await SpecFlow步骤?

1 个答案:

答案 0 :(得分:10)

在当前发布的版本(2.1)版本中,不支持async和await,在v2.2中添加了支持(通过this merged PR),可以从CI server获得,但是尚未正式发布。

<强> [编辑]

2.2已经发布并支持测试中的异步等待。