2009-09-28 13 views
21

私のコードで未処理の例外のために失敗した単体テストをデバッグしようとすると、コードを検査して問題を切り分けるために、Visual Studioが未処理の例外を破ることが予想されます。代わりに、IDEは即座にデバッグモードを終了し、テストは「失敗」と表示され、テスト結果のスタックトレースを参照して問題を検出します。ユニットテストのデバッグ時にVisual Studioで例外が発生しないのはなぜですか?

ユーザーが未処理のCLR例外がスローされたときに、IDEが中断するように構成されていることを確認しました。スローされた例外をすべて壊すようにIDEを構成すると、予期した動作しか得られません。これはもちろん、通常のデバッグをPITAにします。

私は不運ですか?

答えて

23

あなたの例外が処理されていないのはなぜですか。ユニットテストフレームワークは、フードの下で例外を処理し、それらを失敗に変換しています。

代わりに実行する必要があるのは、スローされた例外を解除することです。 「Just My Code」(デフォルトでオン)を有効にしてこれを組み合わせると、期待している動作が得られるはずです。 Visual Studioは、コードによってスローされた例外が発生した場合にのみ壊れます。

+1

これは現在のところ許容される回避策ですが、後でコードが成熟し正当な例外がスローされるとPITAになります。 Groan。 –

+2

私はなぜ、買収私は回避策を理解していない取得、厚い意味で、私は何をクリックするのですか?私にとって、「Debug Tests」さえもブレークポイントには当たらない。 –

+2

@ルークPuplett:明らかに、 "デバッグ"メニュー - > "例外..." - >関連する例外の "スロー"をチェックしてください。 – FunctorSalad

1

ユニットテストフレームワークが例外を処理するため、Visual Studioは例外が処理されると考えます。

-1

これは、テストが(単にVisual Studioをシェルとして使用する)MSTestを使用して実行されるために発生します。 MSTestはスローされているこれらの例外をマスクし、Visual Studioにバブルすることはありません。デバッグモードでテストを実行する場合は、それが動作するはずです。

テストビューでテストを右クリックしてデバッグすることを選択した場合は、IDEでコードが実行され、例外が適切に破棄されます。デフォルトでは

alt text http://i36.tinypic.com/fwowaf.jpg

+2

これは、私が避けたがっているすべての*スロー*(ユーザ未処理の例外ではなく)を破るようにデバッガを設定しない限り動作しません。 –

+0

OPはすでにこれを行っていると述べています。 – binki

0

、あなたはデバッグビルドを行う場合でも、MSTestをあなたが実際に明示的に「デバッグユニットテスト」にそれを指示しない限り、(ブレークポイントなどで)デバッグあなたを与えるdoes't。

それはあなたが「デバッグ」を使用してユニットテストを開始、あなたはデバッグ構成で提供される、ユニットテストで未処理の例外にを破るとすべきである - すなわち:すべてのテストを実行するためにCtrl+R, Ctrl+Aの代わりCtrl+R, Aを使用します。テストウィンドウには、オプション付きの「実行」と「デバッグ」メニューがあります。

+1

私は、CTRL + R、CTRL + AまたはCTRL + R、CTRL + Tを使って明示的に "Debug Unit Tests"を試みていました。繰り返しますが、このアプローチは、デバッガがすべての*スローされた*例外を処理しないように設定されている場合にのみ機能します。これは回避したい例外です。 –

7

私の場合、ツール、オプション、デバッグ、一般:「自分のコードを有効にする」と「例外アシスタントを有効にする」をチェックする必要があります。

0

これは私のためのトリックでした:例外メニューのため
はCtrl + Altキー+ Eを - >プレスReset All
移動先:ツール - >オプション - >デバッグ - >一般:あなたがいることを確認する必要があり、両方の「ジャストの有効化「マイコード」および「例外アシスタントを有効にする」がチェックされます。

関連する問題