@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

NUnitでAssertがFailしたときデバッガ起動

1
投稿者投稿内容
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-01-22 19:27
 NUnitでAssertがFailしたとき、デバッガを起動するための安易なソースコードハックです。#if AUTUMNの範囲がそれにあたります。

 NUnitCoreのAssertion.csの中で:
コード:
    static public void Fail(string message) {
      if (message == null)
        message = "";
#if AUTUMN
      System.Diagnostics.Debugger.Break();
#else
      throw new AssertionFailedError(message);
#endif
    }



 リリースビルドだと上手く機能しないようで、NUnitCoreとNUnitConsoleをデバッグビルドにしておく必要がありました。
 ちなみに、NUnit 1.10はビルドするだけでも一苦労なので注意が必要です。アイコンファイルが無い、キーファイルが無い、といった問題があります。分かっていれば解決は難しくありませんが。

_________________
ふうすけ
常連さん
会議室デビュー日: 2002/02/21
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-01 16:50
リリースモードでうまく行かないのは、System.Dianogstics.DebuggerがConditional(DEBUG)属性付きだからだと思います。
 Conditional属性は多くの場合、#ifディレクティブと同様に使えます。

コード:
class XX
{
    [Conditional("DEBUG")]
    static public void XX()
    {
        Console.WriteLine( "XX" );
    }
}



XXはデバッグ版でしかコンパイルされず、XXの呼び出しはリリース版では削除されます。
 デバッグ用クラスや、つけたり外したりしたいクラスやコードには便利な仕掛けです。
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-03-01 17:20
 いえ、そうではありません。
 以下をリリースビルドして実行すると、ちゃんとデバッガを起動するか質問されます。
コード:
using System;
namespace ConsoleApplication1
{
	class Class1
	{
		[STAThread]
		static void Main(string[] args)
		{
			System.Diagnostics.Debugger.Break();
		}
	}
}


_________________
ふうすけ
常連さん
会議室デビュー日: 2002/02/21
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2002-03-04 10:31
そのようですね、

 NUnitCoreをちょっと眺めていたのですが…原因はよく判りませんでした

1

スキルアップ/キャリアアップ(JOB@IT)