2016-10-14 43 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中遇到同樣的問題。異步測試(我寫的部分,而不是自動生成的代碼)未被等待,流程立即進入下一步。 –