2016-09-07 3 views
2

私は自分のサービスapiとcheck応答(http応答コードと該当する場合は本文)をテストする多数の統合テストを行っています。 api自身は、紺碧の雲のwebapiサービスでホストされています。私の統合テストは、私のプロキシを使ってwebapiに安らかに電話をかけ、応答をチェックし、成功と失敗を返す別のプロジェクトです。その後、統合テストはMSTestを使用して実行されます。私のwebapiのすべてが非同期待機パターンを使用していて、私のプロキシ呼び出しのすべてが非同期であり(私が見る限り)、私はすべてのケースで私のテストapi呼び出しで待っています(実際には、 MSTestではできません)。 (にテストランナー以外の別のスレッドを失敗し、私の統合テストの一つである可能性が高いいくつかの障害が発生したときに、いくつかの場面で、私は恐ろしい私の統合テストの1つは、MSTestを殺す代替スレッドに例外をスローしています。これを管理する良いパターンは何ですか?

'The agent process was stopped while the test was running. 

を受けることを、私はこれを言うことができるものからと思われます既知の問題)。基準点として、私は私のテストシナリオのためのIDisposableをスタイルパターンを作成しました:

管理し、ダウンロードしたファイルをクリーンアップ
using (var scenario = new TestScenario()) 
{ 
    // do some testing stuff 
} 

は、プロキシのインスタンスを管理し、一般的な情報をログに記録します。問題はこれです:ここに私の既存のIDisposableパターンを使用して、MSTestが対応できないと思われる未処理の例外を試す/捕まえる方法がありますか?または、私はtry/catchブロックですべてのテストをラップして、AggregateExceptionをラップしなくてはいけないのでしょうか?

答えて

0

私はとにかく

...そう私はちょうどこのコメントだろう、コメントする担当者を持っていない、私はMSTestを持つ完全に慣れていないんだし、それが非同期テスト実行(例えばxUnitフレームが行うように)許可する場合。

あなたのテストでは待っていますか?そうでない場合は、var response = obj.ExecuteAsync().Resultまたはobj.ExecuteAsync.Wait()を使用して正しくブロックしていますか?

正しくブロックしている場合は、usingステートメントが早期に廃棄されている可能性があります。そのような場合は、ティアダウン中に実行されるIDisposableを実装し、管理対象アイテムをそこに処分することができます。

+0

こんにちは、返信いただきありがとうございます。うん。 MSTestでは、実際には非同期の処理はできません。あなたは.Wait()や.Result()をする必要があります。理論的にはこれはうまくいくはずです。しかし、メソッドの後に終了しないテスト自体のスレッドを止めさせることはありません。 –

+1

@thesenatorタスクを返すテストメソッドは、mstestで数年間サポートされています。私の単体テストの大半はそのフォーマットであり、うまく動作します。何がうまくいかないのは、スレッドが終了するのを待たずに、スレッドが元のテストが終了した後で例外をスローすることです。 – Voo

+1

@Vooありがとう、私は新しいことを学びました。私は最近試してみましたが、テストランナーが嫌いにした署名から 'async'キーワードを逃しました(私はエラーを読んでいたはずです)。だから私の失敗した「公開タスク」の署名ではなく、署名「公開非同期のタスク」であなたは絶対に正しいです。まだ(あなたが言うように)テストランナーは未処理のスレッドを処理できないという問題を残しています。 –

関連する問題