2016-11-27 26 views
7

Więc mam test tak:xunit Assert.ThrowsAsync() nie działa poprawnie?

[Fact] 
    public void Test1() 
    { 
     Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows()); 
    } 

    private async Task MethodThatThrows() 
    { 
     await Task.Delay(100); 
     throw new NotImplementedException(); 
    } 

Ku mojemu zaskoczeniu, Test1 przechodzi pomyślnie. Aby uczynić go nie muszę pisać tak:

Assert.Throws<ArgumentNullException>(() => MethodThatThrows().Wait()); 

Co jest celem ThrowsAsync(), jeśli to nie działa w scenariuszu powyżej?

Odpowiedz

15

Powinieneś uzyskać await wynik (patrz xunit's acceptance tests).

[Fact] public async Task Test1() 
{ 
    await Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows()); 
} 

W tym konkretnym przypadku zdegenerowanej, może po prostu return z Task że Assert.ThrowsAsync plony bez użycia await, ale kluczem jest to, trzeba będzie oddać uzyskaną Task powrotem do ram xUnit, tj

[Fact] 
public Task Test1() => 
    Assert.ThrowsAsync<ArgumentNullException>(MethodThatThrows); 
Powiązane problemy