簡體   English   中英

NUnit沒有為我的單元測試項目發布.dll

[英]NUnit is not releasing the .dll for my unit test project

我有NUnit GUI運行器,每次構建時都在我的單元測試程序集上運行測試。 問題是,當我嘗試構建時,NUnit正在使用Debug文件夾中的.dll,這阻止了它的構建,這阻止了自動測試運行。 有沒有解決的辦法?

每當您構建解決方案時。 我建議你關閉裝有你的.dll的Nunit。 在卸載后嘗試構建,然后您的構建將成功。

當Nunit正在使用你.dll。 它不會讓你的構建成功。

我剛才有類似的問題,我的最終解決方案是從使用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庫給出的一種可能性。 我最喜歡的是XmlResultWriter但也有其他人可用。 所有這些都可以在nunit.util.dll中找到。

不幸的是,這仍然會阻止加載的dll被重建。 我通過在單獨的AppDomain中運行它並在測試完成運行后卸載此域來避免此問題。 然后dll很好地釋放了,無論你想要什么,你都可以使用它。

我可以建議一個略有不同的方法,但與@UvarajGopu一樣....

只要您使用的Visual Studio高於“Express”版本,並且您將UnitTests編寫在單獨的項目中(通常與正在測試的項目一起使用“.UnitTests”后綴),請執行以下操作:

  • 將UnitTests項目設置為StartUp項目(右鍵單擊Solution Explorer,“Set as Startup Project”)
  • 在該項目的項目屬性中,在“調試”選項卡中,選擇“啟動外部程序”,然后選擇NUnit GUI可執行文件。 將UnitTests程序集的名稱放在“命令行參數”中。

現在您只需按F5(開始調試)即可構建項目,並為您啟動NUnit GUI。 這具有額外的優勢,如果您的測試失敗,您可以添加斷點,並逐步使用調試器(無需手動附加調試器)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM