3

NUnit GUI ランナーを使用して、ユニット テスト アセンブリをビルドするたびにテストを実行します。問題は、ビルドしようとすると、Debug フォルダー内の .dll が NUnit によって使用されているため、ビルドが妨げられ、自動テストの実行が妨げられることです。これを回避する方法はありますか?

4

3 に答える 3

1

@UvarajGopuと同じ方針で、少し異なるアプローチを提案できますか....

「Express」バージョンよりも新しい Visual Studio を使用している限り、UnitTests を別のプロジェクト (通常はテスト対象のプロジェクトと一緒に、「.UnitTests」サフィックスを付けて) に記述する場合は、次のようにします。

  • UnitTests プロジェクトをスタートアップ プロジェクトとして設定します (ソリューション エクスプローラーで右クリックし、[スタートアップ プロジェクトとして設定])。
  • そのプロジェクトの [プロジェクト プロパティ] の [デバッグ] タブで、[外部プログラムの開始] を選択し、NUnit GUI 実行可能ファイルを選択します。「コマンド ライン引数」に UnitTests アセンブリの名前を入力します。

F5 を押すだけで (デバッグを開始)、プロジェクトがビルドされ、NUnit GUI が起動します。これには、テストが失敗した場合に、ブレークポイントを追加し、デバッガーを使用してステップスルーできるという追加の利点があります (デバッガーを手動でアタッチする必要はありません)。

于 2015-08-06T14:51:20.737 に答える
0

少し前に同様の問題がありましたが、最終的な解決策は、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 が適切に解放され、必要な操作を実行できます。

于 2015-01-22T11:41:18.150 に答える
0

ソリューションを構築しているときはいつでも。.dll が読み込まれている Nunit を閉じることをお勧めします。アンロード後にビルドを試みると、ビルドは成功します。

Nunit が .dll を使用しているためです。ビルドを成功させることはできません。

于 2014-04-24T13:29:19.113 に答える