3
Moqを使用して単体テストの非同期メソッドをモックする
Web API呼び出しを行うサービスのメソッドをテストしています。HttpClientローカルでWebサービス(ソリューションの別のプロジェクトにある)も実行している場合は、単体テストで通常の方法を使用するとうまくいきます。 ただし、変更をチェックインすると、ビルドサーバーはWebサービスにアクセスできないため、テストは失敗します。 私は、ユニットテスト用にIHttpClientインターフェイスを作成し、アプリケーションで使用するバージョンを実装することで、これを回避する方法を考案しました。単体テストでは、モック化された非同期postメソッドを使用して、モック化されたバージョンを完成させます。ここで問題が発生しました。HttpStatusResultこの特定のテストに対してOKを返したいのですが。別の同様のテストでは、悪い結果が返されます。 テストは実行されますが、完了することはありません。待ちに待っています。私は非同期プログラミング、デリゲート、Moq自体に不慣れで、しばらくの間SOとグーグルを検索してきましたが、まだこの問題を乗り越えられないようです。 これが私がテストしようとしている方法です: public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email) { // do stuff try { // The test hangs here, never returning HttpResponseMessage response = await client.PostAsync(uri, content); // more logic here } // more stuff } これが私の単体テスト方法です: [TestMethod] public async Task QueueNotificationAsync_Completes_With_ValidEmail() { Email email …