測試執行疑難排解
如果測試無法執行,您可以藉由檢查測試環境檢查失敗的原因;而測試環境包括了設定測試的方式,以及現用測試設定中的設定。 在某些情況下,例如與部署相關時,失敗就與測試類型無關。 在其他情況下,測試類型則會決定如何進行檢查,以及要檢查的項目。 如需各種測試類型的檢查秘訣,請參閱個別測試類型的詳細資料。
牽涉到測試的錯誤,可能會在下列兩種層級向您報告:
測試層級錯誤: 藉由使用 [測試結果] 視窗,您可以按兩下測試結果,或以滑鼠右鍵按一下測試結果,再選取 [檢視測試結果詳細資料]。 測試的 [詳細資料] 頁面就會出現並顯示錯誤訊息,同時根據測試類型,也會顯示像是單元測試的堆疊追蹤資訊這類詳細資料。 例如,測試逾時錯誤就是一種測試層級錯誤,這種錯誤會在達到測試的逾時限制時發生。
回合層級錯誤: 位於回合層級的錯誤,其中包括測試設定錯誤,都會透過 [測試結果] 視窗進行回報。 當發生執行層級錯誤時,[測試結果] 視窗狀態列上便會出現一個連結, 選擇此連結就會在測試回合 [詳細資料] 頁面中顯示詳細的錯誤資料。 另外,按一下 [測試結果] 視窗工具列上的 [回合詳細資料],也會顯示測試回合 [詳細資料] 頁面。 例如,回合逾時錯誤就是一種執行層級錯誤,這種錯誤會在達到回合的逾時限制時發生。
並非所有問題都會導致測試無法執行。 在您選擇取得程式碼涵蓋範圍資料之後,如果您的專案有特定的建置設定,執行測試就會產生警告。 如需詳細資訊,請參閱取得程式碼涵蓋範圍資料時使用 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# 專案,請將「平台目標」設為 x86。 如需詳細資訊,請參閱專案設計工具、建置頁 (C#)。
針對 Visual Basic 專案,請將「目標 CPU」設為 x86。 如需詳細資訊,請參閱專案設計工具、編譯頁 (Visual Basic)。
注意事項 |
---|
因為 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,而且可以讓它維持鎖定的狀態。
在這兩種案例中,解決方法可以分成兩個部分。 首先,請執行下列步驟:
在 [工具] 功能表上,選取 [選項]。
[選項] 對話方塊隨即開啟。
展開 [測試工具],並選擇 [測試執行]。
在 [效能] 中,清除 [使測試執行引擎在測試回合之間持續運作] 的核取方塊。
完成這些步驟之後,如果問題仍然存在,請執行下列動作:
變更程式碼,讓以 C++/CLI 編譯的測試專案不需要載入預設 AppDomain 中。 進行此作業的其中一種方法是將您使用的自訂屬性的定義移到在 C# 中實作的個別組件中。
個別測試類型的詳細資料
如以下章節所說明,某些錯誤會經常或特別在您執行特定測試類型的時候發生。
已排序的測試: 進行已排序的測試時所發生的錯誤,經常都牽涉到檔案部署。 在測試引擎能夠執行已排序的測試之前,除了其他必要檔案之外,它還必須找到並部署其所包含之全部測試的測試檔案。 只要其中任何一個測試,進行這個動作失敗,都會導致錯誤。
一般測試: 在執行一般測試時,也有可能發生部署錯誤。 針對一般測試,您可以使用兩種方式指定要部署的檔案:在測試設定的 [部署] 頁面進行指定,以及在一般測試本身的 [撰寫] 頁面進行指定。 如果您沒有列出所有的必要檔案,或者系統無法在您指定的位置找到這些檔案,測試都有可能失敗。
這兩種部署檔案的方式,將會使得錯誤出現在不同的層級。 如果部署錯誤與一般測試 [撰寫] 頁面中指定的檔案有關,錯誤就會出現在測試層級。 如果部署錯誤與測試設定中指定的檔案有關,錯誤就會出現在回合層級。