VisualStudioからのNUnitテストのデバッグに問題があります。空のプロジェクト(コンソールアプリケーション)を作成し、NUnitライブラリへの参照を追加して、簡単なテストを作成しました。
namespace ReimplementingLinq.Tests
{
[TestFixture]
public class WhereTest
{
[Test]
public void SimpleFiltering()
{
int[] source = { 1, 2, 3, 4, 2, 8, 1 };
var result = source.Where(val => val < 4);
int[] expected = {1,2,3,4};
CollectionAssert.AreEqual(expected, result);
}
}
}
次に、私はこのリンクで提供されたアドバイスに従いました Visual StudioからデバッグモードでNUnitを実行するにはどうすればよいですか が、そのトピックのソリューションがどれも私にとっては機能しません。テストの実行中に、ブレークポイントにヒットすることはありません。プロセスにアタッチして、引数付きの外部プログラムでプロジェクトを実行して、ソリューションをテストしてみました。
単体テストをデバッグするにはどうすればよいですか?
Express Edition以外のバージョンのVisual Studioを使用していると仮定すると、 TestDriven.NET が役立つ場合があります。
インストール後
残念ながら、TestDriven.NETはVisual Studioのプラグインであり、Expressエディションはプラグインの使用をサポートしていないため、Visual StudioのExpressエディションではこのメソッドを使用できません。
コンソールアプリケーションを介してデバッガーでテストを実行することもできます。
コンソールアプリケーションのMainメソッド内で、テストフィクスチャの新しいインスタンスを作成し、テストメソッドの1つを呼び出します。たとえば、MyTestsという名前のフィクスチャとTest1という名前のテストがある場合、次のように記述します。
var myTests = new MyTests();
myTests.Test1();
MyTests
クラスのインスタンスを作成する行にブレークポイントを設定し、F5キーを押します
F5(デバッグを開始)またはCtrl-F5(デバッグなしで開始)NUnit GUIを自動的に開始し、その中ですべてのテストを実行します。ブレークポイントがヒットした場合は、テストコードをデバッグすることもできます。
A 画像付きのステップバイステップガイド は、それを行う方法を正確に示します。
怠惰はすべての発明の母です:-)
NUnit 2.4を使用している場合は、次のコードを SetUpFixture
クラスに配置できます。 (これは古いバージョンでも実行できますが、SetUpFixture
と同等のことを行うか、テスト自体にコピーする必要があります。)
_[SetUpFixture]
public class SetupFixtureClass
{
[SetUp]
public void StartTesting()
{
System.Diagnostics.Debugger.Launch();
}
}
_
Debugger.Launch()
が実行することにより、NUnit内で[実行]をクリックすると、次のダイアログが表示されます。
次に、プロジェクトを開いた状態で実行中のVisual Studioのインスタンス(スクリーンショットの2番目)を選択すると、デバッガーが接続され、ブレークポイントや例外がVisual Studioに表示されます。
CodePlexのNHarness をご覧ください。
これは非常にシンプルなリフレクションベースのテストランナーライブラリで、NUnit属性を認識し、Visual Studio Express内のプロジェクトから実行できるため、デバッグテストが可能です。
現在、テストクラスレベルの細分性を備えていますが、メソッドレベルの呼び出しは、おそらく間もなく追加される予定です。
NUnit 2.5.3でも同じ問題があり、最終的に別の解決策が見つかりました。これがあなたのために働くかどうか見てください:
NUnit GUIを開き、[ツール]メニューの[設定...]ダイアログに移動します。設定ツリーのテストローダーセクションのアセンブリ分離サブセクションを選択します。 NUnitプロセスでテストを実行するようにデフォルトプロセスモデルを設定します。
単一の独立したプロセスでテストを実行するように設定していたため、デバッガーはテスト中のdllをデバッグ用のシンボルにリンクできませんでした。デフォルトドメインの使用には、アセンブリごとに別のAppDomainを使用を使用しています。