Erstellen von Tests in C#
Das folgende Beispiel zeigt eine C# .cs-Datei mit einer einfachen einzelnen Testklasse, die das Markup von C#-Tests demonstriert. (Bitte beachten Sie, dass dieses Beispiel nur zu Demonstrationszwecken dient, sodass es nicht kompiliert oder ausgeführt werden kann.)
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 }
Für die Deklaration von C#-Tests verwendet TAEF das VSTS Test Markup.
Um eine Testklasse in C# zu deklarieren, verwenden Sie das Attribut [TestClass] für eine normale C#-Klasse (Zeile 7) und für die Deklaration einer Testmethode das Attribut [TestMethod] für eine normale Klassenmethode (Zeile 51).
C# Test Markup unterstützt auch eine ganze Reihe von Einrichtungs- und Bereinigungsmethoden.
Die statische Methode mit dem festgelegten Attribut [AssemblyInitialize] wird vor allen anderen Klassenmethoden ausgeführt und führt eine Initialisierung auf Assembly-Ebene durch (Zeile 10) . Folglich gibt es eine Assembly-Cleanup-Methode, eine statische Methode mit dem festgelegten Attribut [AssemblyCleanup], die nach Abschluss aller anderen Methoden ausgeführt wird (Zeile 18).
In ähnlicher Weise gibt es Einrichtungs- und Aufräummethoden für Klassen und Tests. (siehe Zeilen 24, 32, 38, 44) Anders als in C++ müssen die Methoden zur Einrichtung und Bereinigung von Klassen in verwaltetem Code statisch sein.
TAEF C# Test Markup unterstützt Test-, Klassen- und Moduleigenschaften.
Um Moduleigenschaften festzulegen, setzen Sie Attribute auf einen Assembly-Initialisierer (siehe Zeilen 11 und 12). Um Eigenschaften auf Klassenebene festzulegen, legen Sie die Eigenschaften auf einem Klasseninitialisierer fest (siehe Zeilen 25 und 26). Für eine Eigenschaft auf Testmethodenebene wenden Sie die Eigenschaft einfach auf eine bestimmte Testmethode an. (siehe Zeilen 52 und 53)
Ausführen unter VSTS
Hinweis: Um die Abhängigkeit von VSTS Binardateien zu verringern, nehmen die Setup-Methoden von Class und Assembly derzeit Object als ersten Parameter.
Wenn Sie die Tests von VSTS aus ausführen möchten, ändern Sie bitte den Typ Object in TestContext. Denken Sie daran, dass dadurch eine Abhängigkeit von microsoft.visualstudio.qualitytools.unittestframework.dll und microsoft.visualstudio.qualitytools.resource.dll hinzugefügt wird.
Die Schritte sind ein wenig anders, wenn Sie unter VSTS ausgeführt werden. Sie müssen Ihre Einstellungen für die lokalen Testausführungen einrichten, um Ihre nicht verwalteten Abhängigkeiten zu übernehmen. Gehen Sie dazu zu:
- Test->Testausführungskonfigurationen bearbeiten->Lokale Testausführung
- Klicken Sie auf Bereitstellung und geben Sie die Dlls ein, die Sie für jeden Test kopieren möchten:
- Wex.Logger.dll
- Wex.Common.dll
- Wex.Common.Managed.dll
- Wex.Communication.dll
- Wex.Logger.Interop.dll
Dies ist notwendig, da VSTS jedes Mal, wenn es Ihre Testfälle ausführt, ein neues Verzeichnis anlegt und Dateien kopiert. Sie können diese Verzeichnisse auf Ihrer Maschine als Nebenordner zu Ihrem Projektordner sehen.
Ausführen von verwalteten Tests in der standardmäßigen Domäne der Anwendung
Standardmäßig führt TAEF zur Isolierung des Codes verwaltete Tests in einer speziellen Domäne für Testanwendungen aus. Bei der Verwendung von Anwendungsdomänen, die nicht zum Standard gehören, können jedoch Szenarien, in denen nativer Code in verwaltetem Code aufgerufen wird (z. B. native Callback-Funktionen, die vom verwalteten Code genutzt werden), zu Fehlern mit der Nachricht führen: „Ein GCHandle kann nicht über AppDomains hinweg übergeben werden“. Erzwingen Sie in diesen Fällen, dass verwaltete Tests in der Standardanwendungsdomäne ausgeführt werden, indem Sie den Switch /defaultAppDomain verwenden.
Beachten Sie, dass das Ausführen von verwalteten Tests in der Standardanwendungsdomäne nicht mit Assembly Config Files kompatibel ist.
Unterstützung für asynchrone Testmethoden
Die NetFX 4.5-Binardateien von TAEF unterstützen die Ausführung von asynchronen TAEF-Testmethoden. Das bedeutet, dass TAEF-Tests, die mit dem Schlüsselwort async gekennzeichnet sind, in der Lage sind, await async Vorgänge auszuführen.
Hinweis Versuchen Sie nicht, diese Funktion mit den NetFX 2.0/3.5 Binardateien von TAEF zu nutzen; nur die NetFX 4.5-Binardateien unterstützen diese Funktion.
TAEF unterstützt sowohl async void- als auch async Task-Testmethoden (beide führen zu der gleichen Funktionalität):
[TestMethod]
public async Task MyAsyncTest()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}
Alternativ:
[TestMethod]
public async void MyAsyncTest2()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}