2016-10-14 2 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 представляется единственным вариантом, доступным для асинхронного API, но на самом деле это для Silverlight, и, насколько я понимаю, использует какой-то API, хотя мы предпочли бы использовать родное ключевое слово C#.

Есть ли способ обработки изначально async/await - это шаги SpecFlow?

+0

взгляните на [это] (https://github.com/techtalk/SpecFlow/pull/647) выпуск –

ответ

6

В текущей версии версии (2.1) нет поддержки для async и ожидания, добавлена ​​поддержка (через this merged PR) в версии v2.2, которая доступна на CI server, но официального релиза пока нет.

2.2 был выпущен и поддерживает асинхронное ожидание в тестах.

+0

Есть ли какие-либо обновления по этому вопросу? Я установил версию specflow 2017, и это не выглядит для генерации асинхронных тестов, но версия specflow nuget равна 2.2. Из сгенерированного кода он говорит, что генератор 2.0 –

+0

Если вы вручную отредактируете свой вкус, чтобы быть асинхронным, это сработает? –

+1

Имеют ту же проблему в VS2017 и SpecFlow 2.2.0 с xUnit 2.2.0. Асинхронные тесты (часть, которую я пишу, а не автогенерированный код) не ожидаются, и поток немедленно переходит к следующим шагам. –

Смежные вопросы