19

小さな問題があります。アプリケーションをデバッグするときに、デバッグ セッション中にメソッドからスローされた例外をシミュレートしたい場合がありますが、それを行う方法がありません。カーソル (現在の行を示す黄色のカーソル) を例外ブロックにドラッグすることさえできません。実行中に例外をトリガーする唯一の方法は、現在のコード行を変更し、スローする例外を記述することです。この方法は、次の実行時に元に戻すのを忘れる可能性があるため、適切ではありません。

4

6 に答える 6

33

デバッグ中にメソッド内から例外をスローするために私が見つけた唯一の実際に機能する方法は、実行中のプロセスの足元から変数をプルすることです。つまり、これから使用される変数を null に設定すると、実行されるとすぐに明らかに例外がスローされます。ただし、カスタム例外 (特定のタイプやメッセージなど) をスローすることはできません。

特定の例外については、以前の投稿に従ってコードを変更する必要があります。

于 2011-12-28T13:11:29.090 に答える
17

条件付きコンパイルを使用できます。

#if DEBUG
    throw new Exception("Test");
#endif

編集:追加の条件付き:

#if DEBUG && ENABLETESTEXCEPTION
    throw new Exception("Test")
#endif

上記の条件が定義されたカスタム構成 (リリース/デバッグと同様) を作成できます (プロジェクト プロパティ -> ビルド -> 条件付きコンパイル シンボル)。

于 2011-05-19T11:30:51.003 に答える
14

残念ながら、Visual Studioは、イミディエイトウィンドウからの例外のスローをまだサポートしていません。

また、ラムダ式、匿名型、コレクション初期化子などをサポートしていません。.NET2.0のようなものだけです。


また、あなたは使用することができますDebug.Assert(false);

于 2011-05-19T11:36:54.787 に答える
3

あなたが使うことができます

bool toThrow = false;
if(toThrow) 
{
     throw new Exception("Test");
}  

スローをtrueに変更します。または、メソッド/プロパティを作成して呼び出します。

于 2011-05-19T11:47:14.917 に答える
2

コードの呼び出しで例外を処理していることをテストするためにこれを行っていますか?

もしそうなら、いくつかの単体テストの作成を検討し、モッキングフレームワークを利用してこれをうまくやってのけることができます。

Moq(モック) http://code.google.com/p/moq/の経験があり ます

このサイトには、セットアップして実行するためのチュートリアルがいくつかあります。始めれば、とても簡単です。

最初にソリューションにテスト プロジェクトをセットアップし、Moq dll を追加してから、オブジェクトの Moq をセットアップし、例外をスローするように指示するテスト メソッドを作成する必要があります。

オブジェクトのメソッドに例外をスローさせるには、次のようにします。

[TestMethod]
[ExpectedException( typeof( InvalidOperationException ) )]
public void YourMethod_ThrowsIOException()
{
    var mock = new Moq<YourClass>();
    mock.Setup( obj => obj.YourMethod( It.IsAny<string>() ) ).Throws<InvalidOperationException>();

    YouClass mockedClass = mock.Object;

    mockedClass.YourMethod( "anything" );
}

これが役立つことを願っています。

于 2011-05-19T11:42:53.637 に答える