2016-10-14 72 views
5

我们正在试图获得以下scenrio一步打破测试的情况下,故障发生DoAyncStuff()方法中:Specflow用的await步骤异步API

[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); 
    ... 
} 

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

The documentation似乎是可供asyncronous API唯一的选择,但它实际上是对Silverlight和,据我了解使用某种类型的API,而我们会preffer使用本机C#等待关键字。

有没有办法处理本机async/await是SpecFlow的步骤?

+0

看看[this](https://github.com/techtalk/SpecFlow/pull/647)发布 –

回答

6

在当前发布的版本(2.1)版本中,不支持异步和等待,在v2.2中添加了支持(通过this merged PR),该版本可从CI server获得,但目前还没有正式版本。

2.2已经发布并支持异步测试。

+0

有没有这方面的更新?,我安装了2017版的specflow,它似乎没有以生成异步测试,但specflow nuget的版本是2.2。从生成的代码它说发电机是2.0 –

+0

如果你手动编辑你的口味是异步它的工作? –

+1

使用xUnit 2.2.0在VS2017和SpecFlow 2.2.0中遇到同样的问题。异步测试(我写的部分,而不是自动生成的代码)未被等待,流程立即进入下一步。 –