共用方式為


測試執行疑難排解

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

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

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

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

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

部署錯誤

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

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

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

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

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

您的方案可能會具有多個測試設定檔。 若是如此,請您務必檢查發生測試錯誤時的現用測試設定。 若要判斷當時的現用測試設定,請檢查 [測試回合詳細資料] 頁面以找出該測試回合。

如需現用測試設定檔的詳細資訊,請參閱 HOW TO:從 Microsoft Visual Studio 選取現用測試設定

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

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

就像來自本機測試回合的測試結果,遠端回合的結果也會在本機向您回報。 某些遠端測試結果的報告功能依賴 Visual Studio Ultimate 或 Visual Studio Premium 的能力從遠端測試電腦複製產生的測試結果檔案到您的本機電腦。

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

如需詳細資訊,請參閱設定測試電腦以便執行測試或收集資料

檢測錯誤

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

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

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

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

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

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

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

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

注意事項注意事項

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

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

警告 VSP2013 : 這個映像必須用 32 位元處理序執行才能進行檢測。 已更新 CLR 標頭旗標以反映這種情況。

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

注意事項注意事項

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

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

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

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

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

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

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

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

  2. 展開 [測試工具],並選擇 [測試執行]。

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

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

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

個別測試類型的詳細資料

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

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

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

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

請參閱

工作

HOW TO:在指定的期間之後強制停止測試

概念

檢測及重新簽署組件

在 Microsoft Test Manager 中檢閱測試結果