2016-07-26 25 views
3

Ich habe dieses Beispiel Test mit xUnit:xUnit Assert.All() async

[Fact] 
    public void SomeTest() 
    { 
     Assert.All(itemList, async item=> 
       { 
        var i = await Something(item); 
        Assert.Equal(item,i); 
       }); 
    } 

Gibt es eine gute Lösung ist der gesamte Test async/awaitable zu machen?

+0

Ihre Testmethode Signatur ändern zu 'öffentlichen async Aufgabe SomeTest()' – Igor

+1

@Igor: Diese Änderung macht nur 'SomeTest()' oberflächlich awaitable. 'Assert.All()' verhält sich immer noch auf die gleiche Weise. – recursive

Antwort

7

Es gibt keine integrierte asynchrone All. Sie können Task.WhenAll verwenden:

[Fact] 
public async Task SomeTest() 
{ 
    var itemList = ...; 
    var results = await Task.WhenAll(itemList.Select(async item => 
    { 
     var i = await Something(item); 
     return i; 
    })); 
    Assert.All(results, result => Assert.Equal(1, result)); 
} 
+2

Guter Ansatz, aber 'var results = await Task.WhenAll (tasks)' gibt Ihnen ein nettes Ergebnis-Array, mit dem Sie arbeiten können. –

+0

Dank @StephenCleary. Bearbeitet. –