2016-10-14 1 views
5

Nous essayons d'obtenir l'étape scenrio suivante pour briser le test en échec de cas se produit au sein de la méthode DoAyncStuff():Specflow étapes avec await pour API async

[Given(@"There is something")] 
public async Task GivenSomething() 
{ 
    await DoStuff(); 
} 

private async Task DoStuff() 
{ 
    await Task.Run(() => Thread.Sleep(1000)); 
    throw new ApplicationException("Boom"); 
} 

Mais il est en fait un heureux vert courir jusqu'à ce que vous utiliser .Wait() ou .Result:

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

le problème semble être dans le NUnit généré spec qui ressemble à ceci:

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

qui semble fonctionner avec le code suivant:

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

Le code ci-dessus est le fichier généré auto-édité manuellement, donc je suis à la recherche d'un moyen de produire du code suivant automatiquement.

The documentationThe documentation semble être la seule option disponible pour l'API asynchrone mais c'est en fait pour Silverlight et autant que je sache, utilise une sorte d'API, alors que nous préférons utiliser le mot-clé n # C# wait.

Existe-t-il un moyen de gérer nativement? async/await est les étapes SpecFlow?

+0

jeter un oeil à [this] (https://github.com/techtalk/SpecFlow/pull/647) version –

Répondre

6

Dans la version actuelle (2.1) il n'y a pas de support pour async et await, le support a été ajouté (via this merged PR) dans v2.2 qui est disponible depuis le CI server, mais il n'y a pas encore de version officielle.

2.2 a été libéré et supporte l'attente asynchrone dans les tests.

+0

Y at-il une mise à jour sur ce ?, J'ai installé la version 2017 de specflow et il ne semble pas pour générer des tests asynchrones, mais la version de la nuget specflow est 2.2. A partir du code généré, il est dit que le générateur est 2.0 –

+0

Si vous modifiez manuellement votre goût pour être asynchrone fonctionne-t-il? –

+1

Avoir le même problème dans VS2017 et SpecFlow 2.2.0 avec xUnit 2.2.0. Les tests asynchrones (la partie que j'écris, pas le code généré automatiquement) ne sont pas attendus et le flux passe immédiatement aux étapes suivantes. –