2016-08-10 7 views
2

アサート例外

AsyncTestDelegate del = async() => await foo.doSomething(null); 
del.ShouldThrowAsync<ArgumentNullException>(); 

だから私はこれを書いた:

public static async Task<T> ShouldThrowAsync<T>(this AsyncTestDelegate del) where T : Exception { 
    return (await Assert.ThrowsAsync(typeof(T), del)) as T; 
} 

しかし、それは動作しません:'Exception' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'Exception' could be found (are you missing a using directive or an assembly reference?)

私は間違っていますか?

答えて

3

私が言うことができる限り、Assert.ThrowsAsyncTaskを返さず、待つことはできません。拡張方法からawaitを削除します。

public static T ShouldThrowAsync<T>(this AsyncTestDelegate del) where T : Exception { 
    return Assert.ThrowsAsync(typeof(T), del) as T; 
} 

docsの使用例。 Assert.ThrowsAsyncMyExceptionを返し、awaitはデリゲートに含まれていることに注意してください。

[TestFixture] 
public class UsingReturnValue 
{ 
    [Test] 
    public async Task TestException() 
    { 
    MyException ex = Assert.ThrowsAsync<MyException>(async() => await MethodThatThrows()); 

    Assert.That(ex.Message, Is.EqualTo("message")); 
    Assert.That(ex.MyParam, Is.EqualTo(42)); 
    } 
} 
+0

ええ私はそれが代理人であったため、アサーションが待たれる必要があると自動的に仮定しました。 –

+1

MSの命名規則に基づいて、それはあったはずです。 ;) – smoksnes

関連する問題