NUnit GUI ランナーを使用して、ユニット テスト アセンブリをビルドするたびにテストを実行します。問題は、ビルドしようとすると、Debug フォルダー内の .dll が NUnit によって使用されているため、ビルドが妨げられ、自動テストの実行が妨げられることです。これを回避する方法はありますか?
3 に答える
@UvarajGopuと同じ方針で、少し異なるアプローチを提案できますか....
「Express」バージョンよりも新しい Visual Studio を使用している限り、UnitTests を別のプロジェクト (通常はテスト対象のプロジェクトと一緒に、「.UnitTests」サフィックスを付けて) に記述する場合は、次のようにします。
- UnitTests プロジェクトをスタートアップ プロジェクトとして設定します (ソリューション エクスプローラーで右クリックし、[スタートアップ プロジェクトとして設定])。
- そのプロジェクトの [プロジェクト プロパティ] の [デバッグ] タブで、[外部プログラムの開始] を選択し、NUnit GUI 実行可能ファイルを選択します。「コマンド ライン引数」に UnitTests アセンブリの名前を入力します。
F5 を押すだけで (デバッグを開始)、プロジェクトがビルドされ、NUnit GUI が起動します。これには、テストが失敗した場合に、ブレークポイントを追加し、デバッガーを使用してステップスルーできるという追加の利点があります (デバッガーを手動でアタッチする必要はありません)。
少し前に同様の問題がありましたが、最終的な解決策は、NUnit GUI ランナーの使用をやめ、コードから直接実行することでした。
私のプロジェクトでは、新しくビルドされた dll と nunit.core および nunit.utils に必要な NUnit ライブラリを参照しました。コード自体は非常に単純です。
TestResult ExecuteTests(string testAssemblyPath) {
CoreExtensions.Host.InitializeService();
TestPackage testPackage = new TestPackage(testAssemblyPath);
testPackage.BasePath = Path.GetDirectoryName(testAssemblyPath);
RemoteTestRunner testRunner = new RemoteTestRunner();
testRunner.Load(testPackage);
TestResult testResult = testRunner.Run(new NullListener(), TestFilter.Empty, true, LoggingThreshold.Warn);
testRunner.Unload();
CoreExtensions.Host.UnloadService();
return testResult;
}
TestResult
オブジェクトは非常に強力です。とりわけ、すべての結果、サブ結果、テスト自体などが含まれています。それらを分析するには、単純なパーサーを作成するか、NUnit ライブラリによって提供される可能性の 1 つを使用できます。私のお気に入りですXmlResultWriter
が、他にも利用できるものがあります。それらはすべて nunit.util.dll にあります。
残念ながら、ロードされた dll の再構築はブロックされます。これを別の AppDomain で実行し、テストの実行が終了した後にこのドメインをアンロードすることで、この問題を回避しました。その後、dll が適切に解放され、必要な操作を実行できます。
ソリューションを構築しているときはいつでも。.dll が読み込まれている Nunit を閉じることをお勧めします。アンロード後にビルドを試みると、ビルドは成功します。
Nunit が .dll を使用しているためです。ビルドを成功させることはできません。