Udostępnij przez


Tworzenie testów w języku C#

W poniższym przykładzie przedstawiono plik .cs języka C# z prostą pojedynczą klasą testową, która demonstruje znaczniki testów języka C#. (Należy pamiętać, że ten przykład jest przeznaczony tylko do celów demonstracyjnych, więc nie zostanie skompilowany ani uruchomiony).

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   }

W celu deklarowania testów C#, TAEF używa znacznika testów VSTS.

Aby zadeklarować klasę testową w języku C#, należy użyć atrybutu [TestClass] w zwykłej klasie C# (wiersz 7) i dla deklaracji metody testowej użyj atrybutu [TestMethod] w zwykłej metodzie klasy (wiersz 51).

Znaczniki testowe języka C# obsługują również pełny zakres metod konfiguracji i oczyszczania.

Metoda statyczna z zestawem atrybutów [AssemblyInitialize] jest uruchamiana przed innymi metodami klasy i wykonuje inicjowanie na poziomie zestawu (wiersz 10). W związku z tym istnieje metoda oczyszczania zestawu, metoda statyczna z zestawem atrybutów [AssemblyCleanup], który jest uruchamiany po zakończeniu wszystkich innych metod (wiersz 18).

Podobnie istnieją metody konfiguracji i oczyszczania zarówno dla klas, jak i testów. (patrz wiersze 24, 32, 38, 44) W przeciwieństwie do języka C++, metody konfiguracji i oczyszczania klas w kodzie zarządzanym muszą być statyczne.

Znaczniki testowe TAEF C# obsługują właściwości testowe, klasowe i modułowe.

Aby ustawić właściwości modułu, ustaw atrybuty inicjatora zestawu (zobacz wiersze 11 i 12). Podobnie jak w przypadku ustawiania właściwości na poziomie klasy, ustaw właściwości inicjatora klasy (zobacz wiersze 25 i 26). W przypadku właściwości poziomu metody testowej wystarczy zastosować właściwość do określonej metody testowej. (patrz wiersze 52 i 53)

Uruchamianie w usłudze VSTS

Uwaga: aby zmniejszyć zależność od plików binarnych usługi VSTS, obecnie metody konfiguracji klasy i zestawu przyjmują Obiekt jako pierwszy parametr.

Jeśli chcesz uruchomić testy z usługi VSTS, zmień ten typ obiektu na TestContext . Należy pamiętać, że spowoduje to dodanie zależności od microsoft.visualstudio.qualitytools.unittestframework.dll i microsoft.visualstudio.qualitytools.resource.dll.

Kroki są nieco inne podczas uruchamiania w środowisku VSTS. Aby skopiować niezarządzane zależności, należy skonfigurować ustawienia uruchamiania testu lokalnego. Aby to zrobić, przejdź do:

  • Test->Edytuj konfiguracje przebiegu testu—>Lokalny przebieg testu
  • Kliknij pozycję Wdrażanie. Wprowadź biblioteki dll, które musisz skopiować dla każdego testu.
    • Wex.Logger.dll
    • Wex.Common.dll
    • Wex.Common.Managed.dll
    • Wex.Communication.dll
    • Wex.Logger.Interop.dll

Jest to konieczne ze względu na fakt, że usługa VSTS tworzy nowy katalog i kopiuje pliki za każdym razem, gdy uruchamia przypadki testowe. Te katalogi można zobaczyć na maszynie jako folder równorzędny do folderu projektu.

Uruchamianie testów zarządzanych w domyślnej domenie aplikacji

Domyślnie w przypadku izolacji kodu testowego TAEF wykonuje testy zarządzane w specjalnej domenie aplikacji testowej. Jednak gdy używane są domeny aplikacji inne niż domyślne, sytuacje, w których kod natywny wywołuje kod zarządzany (np. natywne funkcje wywołania zwrotnego, używane przez kod zarządzany), mogą powodować wystąpienie błędu z komunikatem: "Nie można przekazać GCHandle między domenami aplikacji". W tych scenariuszach wymuś uruchamianie testów zarządzanych w domyślnej domenie aplikacji przy użyciu przełącznika /defaultAppDomain .

Należy pamiętać, że uruchamianie testów zarządzanych w domyślnej domenie aplikacji jest niezgodne z plikami konfiguracji zestawu.

Obsługa metod testowych asynchronicznych

Pliki binarne NetFX 4.5 firmy TAEF obsługują wykonywanie asynchronicznych metod testowych TAEF. Oznacza to, że testy TAEF oznaczone za pomocą słowa kluczowego asynchronicznego mogą oczekiwać na operacje asynchroniczne.

Uwaga Nie należy próbować korzystać z tej funkcji w plikach binarnych NetFX 2.0/3.5 TAEF; tylko pliki binarne NetFX 4.5 obsługują tę funkcję.

TAEF obsługuje zarówno asynchroniczne void, jak i asynchroniczne metody testowe Task (oba typy metod zapewniają tę samą funkcjonalność):

[TestMethod]
public async Task MyAsyncTest()
{
    await AsyncAPICall1();
    var result = await AsyncAPICall2();
    Verify.IsTrue(result);
}

Inna możliwość:

[TestMethod]
public async void MyAsyncTest2()
{
    await AsyncAPICall1();
    var result = await AsyncAPICall2();
    Verify.IsTrue(result);
}