2017-10-27 14 views
0

非同期メソッドで発生する例外をアサートしようとしています。
残念ながら、アサーションは機能しません。ユニットテスト非同期メソッドでの例外のスロー

throw new Exception(...)SaveCategoriesAsync(...)メソッドで呼び出されていることをデバッグで確認しました。

通常、Actionのメソッドは単体テストで動作しますが、非同期では機能しないようです。

私は、アサーションの枠組みとしてフレームワークとFluentAssertionsをあざけるようFakeItEasyを使用しています。

[TestMethod] 
public void SaveCategoriesAsync_When_Then() 
{ 
    A.CallTo(() => this.articleRepository.GetArticles(A<IList<long>>._)).Returns(new List<ArticleModel>()); 

    Action action = async() => await this.testee.SaveCategoriesAsync(new List<int>()); 

    action.ShouldThrow<Exception>(); 
} 

例外をアサートできるようにするにはどうすればよいですか?事前

+0

異なるスレッドで例外をキャッチすることはできません。 ShouldThrow()メソッドが何か特別なことをしない場合、動作しません。あなたのアサーション・フレームワークが、非同期アクションのための手段を提供して、例外を検出したり、独自のアクションを書くことができるかどうかをチェックします。 – helb

答えて

1

おかげ答えは実際に私が試したものに非常に似ています。しかし、非同期で、あなたの代わりに、アクションのFunc<Task>を使用する必要があります。それはテストランナーを変更することは容易である場合

[TestMethod] 
public void SaveCategoriesAsync_When_Then() 
{ 
    A.CallTo(() => this.articleRepository.GetArticles(A<IList<long>>._)).Returns(new List<ArticleModel>()); 

    Func<Task> func = async() => await this.testee.SaveCategoriesAsync(new List<int>()); 

    func.ShouldThrow<Exception>(); 
} 
0

NUnitを考えます。次に、コードは次のようになります。

... 
Assert.ThrowsAsync<Exception>(async() => await this.testee.SaveCategoriesAsync(new List<int>()); 
... 
関連する問題