HOW TO:在指定的期間之後強制停止測試
您可以設定測試執行時要遵循的時間限制。 舉例來說,如果您在測試實驗室中工作,並且需要在一天的特定時間內完成某個測試回合,就可能必須設定時間限制。
另一個需要使用時間限制的情節,就是遇到無回應程式碼的時候。 如果測試遇到一段不會回應的程式碼,使用測試逾時和測試回合逾時可讓個別測試完成,如此測試回合就能繼續進行後續的測試。
設定時間限制的方法有兩種:
您可以在測試設定中設定測試和測試回合適用的逾時值 (Time-Out Value)。設定中所有測試的逾時週期: 如需測試設定的詳細資訊,請參閱指定 Visual Studio 測試的測試設定。
您可以藉由設定個別測試的屬性,以覆寫每個測試的逾時值。覆寫個別測試的每個測試的逾時值: 但是您無法覆寫測試回合的逾時值。
您無法針對特定測試類型設定測試逾時。 測試逾時不會套用到手動測試,但即使測試回合包含手動測試,所設定的測試回合逾時一定會生效。
針對測試和測試回合設定時間限制具有下列效果:
當測試回合的執行時間達到它的逾時值,即使有些測試尚未執行,測試回合都會中止。
當個別測試的執行時間達到其逾時值,該測試隨即停止執行,而且測試將標記為 [逾時]。 測試回合會繼續進行後續的測試。
初始設定方法如何影響測試逾時
測試回合可以包含 AssemblyInitializeAttribute 方法和 ClassInitializeAttribute 方法。 如果這些方法已定義,便會在有限時間內完成作業,接著開始測試回合的第一個測試。
第一項測試使用的時間會加上初始設定方法所用的時間。 我們可以將這項行為表示成使用下列詞彙的公式:
Dt = 總持續期間
Dr = 測試執行的時間
I = 組件和類別的初始設定方法
Tn = 在測試回合內隨機位置中執行的測試
T1 = 在測試回合內第一個位置中執行的測試
下列公式適用於第一項測試後面的所有測試:
D t [T n ] = D r [T n ]
但請注意下列情況:
D t [T 1 ] = D r [T 1 ] + D[I]
執行的第一項測試可能已指派每個測試的逾時值。 在這種情況下,初始設定時間會計入對第一項測試所加的時間限制中,因此可能導致測試失敗。
注意事項 |
---|
這項限制可能只會導致第一項測試失敗。測試回合中的後續測試則不會受到影響。 |
如果您的測試回合包含初始設定方法,您可以透過下列方式來規避這項限制:將大於測試方法及任何初始設定方法之預期時間總和的逾時值套用到每項測試。 您必須對每項測試執行這項動作。 因為單元測試無法保證測試執行的順序,所以您無法預測最先執行的測試。
清除方法如何影響測試回合逾時
測試回合可以包含 AssemblyCleanupAttribute 方法和 ClassCleanupAttribute 方法。 這些方法完成作業後,測試回合便會結束。
測試回合可能已指派逾時值。 測試回合使用的時間會加上清除方法所用的時間。 換句話說,也就是清除時間會計入對測試回合整體所加的時間限制中,因此可能導致測試回合逾時。
設定中所有測試的逾時週期
若要設定所有測試的測試執行階段使用測試設定檔案
開啟 [方案總管]。
在方案的 [方案項目] 資料夾中,按兩下測試設定檔。
[組態設定] 對話方塊隨即出現。
選取 [測試逾時]。
選取 [如果總執行時間超過以下值,即中止測試執行:]
設定測試回合的逾時值 (以小時、分鐘和秒為單位)。
選擇 [關閉資料庫],然後選擇 [下一步]。
為了讓這項設定生效,所編輯的測試設定必須是現用的測試設定。 如需詳細資訊,請參閱HOW TO:從 Microsoft Visual Studio 選取現用測試設定。
覆寫個別測試的每個測試的逾時值
若要使用單元測試的屬性設定每個測試的逾時值
開啟單元測試的原始程式碼檔。
找出測試的 TestMethod 屬性。
加入 Timeout 屬性,以及表示逾時值的參數。
逾時值以毫秒為單位表示。
範例 (Visual C#):
[TestMethod(), Timeout(80)] public void MyTestMethod() { // test code }
範例 (Microsoft Visual Basic):
<TestMethod(), Timeout(80)> _ Public Sub MyTestMethod() ' test code End Sub
(僅限於這個測試) 您設定的值會覆寫測試設定中所設定每個測試的逾時值。 測試回合的逾時值則不會受影響。