共用方式為


測試執行疑難排解

更新:2007 年 11 月

如果測試無法執行,您可以藉由檢查測試環境檢查失敗的原因。而測試環境包括了設定測試的方式,以及現用測試回合組態的設定。在某些情況下,例如與部署相關時,失敗就與測試類型無關。在其他情況下,測試類型則會決定如何進行檢查,以及要檢查的項目。如需各種測試類型的檢查秘訣,請參閱個別測試類型的詳細資料。

牽涉到測試的錯誤,可能會在下列兩種層級向您報告:

  • 測試層級錯誤:藉由使用 [測試結果] 視窗,您可以按兩下測試結果,或以滑鼠右鍵按一下測試結果,再選取 [檢視測試結果詳細資料]。測試的 [詳細資料] 頁面就會出現並顯示錯誤訊息,同時根據測試類型,也會顯示像是單元測試的堆疊追蹤資訊這類詳細資料。例如,測試逾時錯誤就是一種測試層級錯誤,這種錯誤會在達到測試的逾時限制時發生。

  • 回合層級錯誤:位於回合層級的錯誤,其中包括回合組態設定錯誤,都會透過 [測試結果] 視窗進行回報。當發生執行層級錯誤時,[測試結果] 視窗狀態列上便會出現一個連結,按一下此連結就會在測試回合 [詳細資料] 頁面中顯示錯誤的詳細資料。另外,按一下 [測試結果] 視窗工具列上的 [回合詳細資料],也會顯示測試回合 [詳細資料] 頁面。例如,回合逾時錯誤就是一種執行層級錯誤,這種錯誤會在達到回合的逾時限制時發生。

並非所有問題都會導致測試無法執行。在您選擇取得程式碼涵蓋範圍資料之後,如果您的專案有特定的建置設定,執行測試就會產生警告。如需詳細資訊,請參閱取得程式碼涵蓋範圍資料時使用 AnyCPU 建置設定。

部署錯誤

某些錯誤可能會在任何可以自動執行的測試發生,也就是說,這些測試是不屬於手動的任何測試類型。這些錯誤經常會與測試的部署相關,在部署測試時,含有測試的檔案就會複製到另一個資料夾,其位置可能會在本機電腦或遠端電腦。如需詳細資訊,請參閱測試部署

例如,對於單元測試,從測試專案建置的 .dll 檔案,就是必須部署的檔案。如果無法部署這個二進位檔案,當您執行其所包含的任何單元測試時,這些單元測試就會立即在 [測試結果] 視窗中標記為 [失敗]。

若要修正這項錯誤,請確認這些檔案存在於本機電腦上,而且最後一次重新建置測試二進位碼檔案時沒有發生建置錯誤。

可以進行部署的不僅只有二進位檔案,您可以將特定的檔案 (像是資料檔) 指定為測試的必要檔案,因此必須隨著測試進行部署。在部署階段,如果由於遭到移除或刪除而無法找到這個檔案,測試就會無法正確執行,並會發生錯誤。如需此錯誤與一般測試相關的資訊,請參閱個別測試類型的詳細資料。

若要檢查這項錯誤,請先記下用來編輯測試回合組態之對話方塊的 [部署] 頁面,所指定的檔案和資料夾。如需詳細資訊,請參閱 HOW TO:指定測試回合組態。然後在磁碟機上檢查這些檔案和資料夾,確定它們的存在並且具有相同的名稱。

您的方案可能會具有多個回合組態檔案,若是如此,請您務必檢查發生測試錯誤時的現用回合組態。若要判斷當時的現用回合組態,請檢查 [測試回合詳細資料] 頁面以找出該測試回合。如需詳細資訊,請參閱已報告的測試結果中的「測試回合詳細資料頁面」一節。

如需現用回合組態檔案的詳細資料,請參閱 HOW TO:套用測試執行組態。 

報告遠端測試結果中的錯誤

當您在遠端執行測試時,測試結果可能無法顯示,這項錯誤可能與遠端的測試回合本質有關。

就像來自本機測試回合的測試結果,遠端回合的結果也會在本機向您回報。某些遠端測試結果的報告,必須依靠 Visual Studio Team System Test 版的功能,將產生的測試結果從遠端測試電腦複製到本機電腦。

如果發現遠端測試結果出現錯誤,請先判斷遠端電腦和執行 Visual Studio 的電腦,兩者之間的網路連接是否發生中斷。

如需詳細資訊,請參閱控制器、代理程式和 Rig 疑難排解

檢測錯誤

若要啟用程式碼涵蓋範圍的報告,測試的二進位檔案必須接受檢測,然後在測試對其執行之前先完成部署。

檢測二進位檔案的失敗,也會造成程式碼涵蓋範圍報告的失敗。在測試回合完成之後,[測試回合詳細資料] 頁面便會顯示錯誤訊息,表示無法報告程式碼涵蓋範圍,並且顯示原因。

檢測二進位檔案失敗的可能原因,包括該檔案被標記為唯讀,或是正由另一個處理序使用中。若要修正唯讀二進位檔案的錯誤,請先檢查二進位檔案的屬性,以確定能夠寫入該檔案。若要知道應該檢查哪個二進位檔案,請開啟現用回合組態的 [程式碼涵蓋範圍] 頁面,也就是您指定所要檢測檔案的地方。如需詳細資訊,請參閱 HOW TO:取得程式碼涵蓋範圍資料

另一個使用檢測時導致程式碼涵蓋範圍失敗的原因,則有可能在與手動測試一起使用一或多個單元測試時發生。在進行手動測試時,軟體測試人員會執行已經測試過的實際執行程式碼 (Production Code),如果軟體測試人員按 F5 或 CTRL+F5 啟動或偵錯程式碼,專案的可執行檔就會重新建置,如此就會移除檢測。

同時,請確認沒有其他處理序在使用該二進位檔案。例如,確認 Visual Studio 的另一個執行個體中並未開啟該檔案。

在檢測強式名稱的組件時,您可能會遭遇其他與重新簽署組件有關的錯誤。如需詳細資訊,請參閱檢測及重新簽署組件

關閉測試結果以改善效能

若要改善 Visual Studio 的效能,請關閉舊的測試結果。

當您執行測試時,Visual Studio 會將測試回合及測試結果儲存在記憶體中。隨著越來越多累積的測試回合和結果,便會配置更多的記憶體。您可以按一下 [測試結果] 視窗工具列上的 [關閉結果],釋放記憶體中的測試回合。這個動作會釋放測試結果物件,但是不會明確呼叫記憶體回收行程。這表示,記憶體將變成可用,但不一定會立即可用。

您也可以設定記憶體中保留的最大測試回合數目。如需詳細資訊,請參閱 HOW TO:限制儲存測試回合的數目

取得程式碼涵蓋範圍資料時使用 AnyCPU 建置設定

只有在測試 32 位元組件中的程式碼時,才能取得程式碼涵蓋範圍資料。若要確保此條件,請設定特定的建置屬性:

注意事項:

因為 C++ 專案的平台選擇中沒有 AnyCPU,因此本警告不適用於 C++ 專案。

如果您以 AnyCPU 的值來建置您的方案,在產生的組件上所執行的測試便會產生程式碼涵蓋範圍資料,但該測試回合也會產生警告。您可以在 [測試回合詳細資料頁面] 檢視警告文字:

Warning VSP2013 : Instrumenting this image requires it to run as a 32-bit process.  The CLR header flags have been updated to reflect this.

此警告表示組件以套用的 x86 屬性重新編譯,以便在此測試回合中取得程式碼涵蓋範圍資料。若要避免此警告,請以 x86 設定編譯任何您需要程式碼涵蓋範圍資料的組件。

注意事項:

如果您的應用程式要在 32 位元和 64 位元電腦上執行,請記得在測試完成後,使用 AnyCPU 設定予以重新編譯。

執行單元測試可以鎖定 C++/CLI 測試組件

您可能會遇到測試執行引擎開啟並鎖定測試專案中某個組件的情況。例如,在發生這種情況時,您將無法儲存組件的變更。下列情況可能會發生這個問題:

  • 案例 1:您已停用測試專案 TestProjectA 的部署。TestProjectA 是以 C++/CLI 進行編譯。TestProjectA 內的程式碼定義了屬性 (Attribute) 類別 (Class),而該屬性可裝飾 TestProjectA 中至少一個測試方法。此時,當您在 TestProjectA 中執行單元測試時,測試執行引擎便會開啟 TestProjectA.DLL,而且可以讓它維持鎖定的狀態。

  • 案例 2:您的測試專案 TestProject1 包含從另一個測試專案 TestProject2 編譯的 DLL。TestProject2 是以 C++/CLI 編譯。TestProject2 內的程式碼定義了屬性 (Attribute) 類別,而該屬性可裝飾 TestProject2 中至少一個測試方法。現在,當您在 TestProject1 中執行單元測試時,測試執行引擎便會開啟 TestProject2.DLL,而且可以讓它維持鎖定的狀態。

在這兩種案例中,解決方法可以分成兩個部分。首先,請執行下列步驟:

  1. 在 [工具] 功能表上,選取 [選項]。

    [選項] 對話方塊隨即開啟。

  2. 展開 [測試工具],並按一下 [測試執行]。

  3. 在 [效能] 中,清除 [使測試執行引擎在測試回合之間持續運作] 的核取方塊。

完成這些步驟之後,如果問題仍然存在,請執行下列動作:

變更程式碼,讓以 C++/CLI 編譯的測試專案不需要載入預設 AppDomain 中。進行此作業的其中一種方法是將您使用的自訂屬性的定義移到在 C# 中實作的個別組件中。

個別測試類型的詳細資料

如以下章節所說明,某些錯誤會經常或特別在您執行特定測試類型的時候發生。

  • 手動測試:手動測試無法在遠端執行,在嘗試啟動包含手動測試的測試回合時,Visual Studio Test 版會嘗試從測試回合中移除手動測試。發生這種情況時,您便會收到這個動作的警示,並且必須選擇取消測試回合,或是讓測試回合進行而不使用手動測試。如需詳細資訊,請參閱 Test 版的對話方塊

  • 已排序的測試:進行已排序的測試時所發生的錯誤,經常都牽涉到檔案部署。在測試引擎能夠執行已排序的測試之前,除了其他必要檔案之外,它還必須找到並部署其所包含之全部測試的測試檔案。只要其中任何一個測試,進行這個動作失敗,都會導致錯誤。

  • 一般測試:在執行一般測試時,也有可能發生部署錯誤。針對一般測試,您可以使用兩種方式指定要部署的檔案:在測試回合組態的 [部署] 頁面進行指定,以及在一般測試本身的 [撰寫] 頁面進行指定。如果沒有列出所有的必要檔案,或是 Team System 測試工具無法在您指定的位置找到這些檔案,測試都有可能失敗。

    這兩種部署檔案的方式,將會使得錯誤出現在不同的層級。如果部署錯誤與一般測試 [撰寫] 頁面中指定的檔案有關,錯誤就會出現在測試層級。如果部署錯誤與回合組態中指定的檔案有關,錯誤就會出現在回合層級。

請參閱

工作

HOW TO:設定執行測試的時間限制

概念

Test 版的對話方塊

已報告的測試結果

檢測及重新簽署組件

單元測試和 C++

其他資源

測試部署

設定測試執行方式