在 C 中撰寫測試#
下列範例顯示 C# .cs檔案,其中包含示範 C# 測試標記的簡單單一測試類別。 (請注意,此範例僅供示範之用,因此不會編譯或執行。
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using System;
3 using System.Collections;
4 using WEX.Logging.Interop;
5 using WEX.TestExecution;
6
7 [TestClass]
8 public class ManagedStartMenuTests
9 {
10 [AssemblyInitialize]
11 [TestProperty("Component", "Navigation")]
12 [TestProperty("SubComponent", "StartMenu")]
13 public static void RunModuleSetup(Object context)
14 {
15 defaultPolicy = SetObjectFactoryPolicy(PolicyClassic);
16 }
17
18 [AssemblyCleanup]
19 public static void RunModuleCleanup()
20 {
21 SetObjectFactoryPolicy(defaultPolicy);
22 }
23
24 [ClassInitialize]
25 [TestProperty("TeamOwner", "WEX")]
26 [TestProperty("GroupOwner", "MediaPlayerTest")]
27 public static void TestClassSetup(Object testContext)
28 {
29 objectFactory = new ObjectFactory();
30 }
31
32 [ClassCleanup]
33 public static void TestClassCleanup()
34 {
35 objectFactory.Dispose();
36 }
37
38 [TestInitialize]
39 public void TestMethodSetup()
40 {
41 startMenuObject = objectFactory.CreateObject();
42 }
43
44 [TestCleanup]
45 public void TestMethodCleanup()
46 {
47 startMenuObject.Dispose();
48 }
49
50
51 [TestMethod]
52 [Owner("Someone")]
53 [Priority(0)]
54 public void TestMethod1()
55 {
56 Verify.AreEqual(startMenuObject.size, expectedObjectSize);
57 }
58 }
針對宣告 c# 測試,TAEF 會使用 VSTS 測試標記。
若要在 C# 中宣告測試類別,您可以在一般 C# 類別 (Line 7) 上使用 [TestClass] 屬性,並在一般類別方法上使用 [TestMethod] 屬性(第 51 行)。
C# 測試標記也支援完整的設定和清除方法。
具有 [AssemblyInitialize] 屬性集的靜態方法會在任何其他類別方法之前執行,並執行元件層級初始化 (Line 10) 。 因此,有元件清除方法,這是具有 [AssemblyCleanup] 屬性集的靜態方法,會在所有其他方法完成之後執行 (Line 18)。
同樣地,也有類別和測試安裝和清除方法。 (見行 24, 32, 38, 44)不同於 C++,Managed 程式代碼中的類別設定和清除方法必須是靜態的。
TAEF C# 測試標記支援測試、類別和模組屬性。
若要設定模組屬性,請在元件初始化運算式上設定屬性(請參閱第 11 行和 12 行)。 類似於設定類別層級屬性,請在類別初始化運算式上設定屬性(請參閱行 25 和 26)。 對於測試方法層級屬性,只要將 屬性套用至特定的測試方法即可。 (見第52行和53行)
在 VSTS 下執行
注意:為了減少 VSTS 二進位檔的相依性,目前 Class 和 Assembly 安裝程式方法會採用 Object 做為第一個參數。
如果您想要從 VSTS 執行測試,請將該物件類型變更為 TestContext 類型。 請記住,這會新增對microsoft.visualstudio.qualitytools.unittestframework.dll和microsoft.visualstudio.qualitytools.resource.dll的相依性。
在 VSTS 下執行時,步驟稍有不同。 您必須設定本機測試回合設定,以複製 Unmanaged 相依性。 若要這樣做,請移至:
- Test-Edit> Test Run Configurations-Local> Test Run
- 點選 「部署]。輸入每個測試需要複製的 dll:
- Wex.Logger.dll
- Wex.Common.dll
- Wex.Common.Managed.dll
- Wex.Communication.dll
- Wex.Logger.Interop.dll
這是必要的,因為 VSTS 會建立新的目錄,並在每次執行測試案例時複製檔案。 您可以將電腦上的這些目錄視為項目資料夾的同層級資料夾。
在預設應用程式域中執行受控測試
根據預設,針對測試程式代碼隔離,TAEF 會在特殊的測試應用程式域中執行受控測試。 不過,使用非預設應用程式域時,原生程式代碼呼叫 Managed 程式代碼的案例(例如 Managed 程式代碼取用的原生回呼函式)可能會導致訊息錯誤:「無法跨 AppDomains 傳遞 GCHandle」。 在這些案例中,強制受控測試使用 /defaultAppDomain 參數在默認應用程式域中執行。
請注意,在默認應用程式域中執行 Managed 測試與元件組態檔不相容。
支援異步測試方法
TAEF 的 NetFX 4.5 二進位檔支援執行異步 TAEF 測試方法。 這表示以 async 關鍵詞標示的 TAEF 測試能夠等候異步操作。
注意 請勿嘗試搭配TAEF的 NetFX 2.0/3.5 二進位檔來利用此功能;只有 NetFX 4.5 二進位檔支援此功能。
TAEF 同時支援 async void 和 async Task 測試方法(兩者都會導致相同的功能):
[TestMethod]
public async Task MyAsyncTest()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}
或者:
[TestMethod]
public async void MyAsyncTest2()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}