Поделиться через


Разработка тестов в C#

В приведенном ниже примере показан файл .cs C# с простым классом тестирования, демонстрирующим разметку тестов 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#, используйте атрибут [TestClass] в обычном классе C# (Line 7) и для объявления метода теста используйте атрибут [TestMethod] в обычном методе класса (Line 51).

Разметка тестов C# также поддерживает полный спектр методов установки и очистки.

Статический метод с набором атрибутов AssemblyInitialize выполняется перед любыми другими методами класса и выполняет инициализацию уровня сборки (Строка 10). Следовательно, существует метод очистки сборки, статический метод с набором атрибутов [AssemblyCleanup], который выполняется после завершения всех других методов (Строка 18).

Аналогичным образом существуют методы установки классов и тестов и очистки. (см. строки 24, 32, 38, 44) В отличие от C++, методы установки и очистки классов в управляемом коде должны быть статическими.

Разметка теста TAEF C# поддерживает свойства тестов, классов и модулей.

Чтобы задать свойства модуля, задайте атрибуты в инициализаторе сборок (см. строки 11 и 12). Аналогичным образом, чтобы задать свойства уровня класса, задайте свойства для инициализатора класса (см. строки 25 и 26). Для свойства уровня метода теста просто примените свойство к конкретному методу теста. (см. строки 52 и 53)

Выполнение в VSTS

Примечание. Чтобы уменьшить зависимость от двоичных файлов VSTS, методы установки класса и сборки в настоящее время принимают Объект в качестве первого параметра.

Если вы хотите выполнить тесты из VSTS, измените этот тип объекта на тип TestContext . Помните, что это приведет к добавлению зависимости от microsoft.visualstudio.qualitytools.unittestframework.dll и microsoft.visualstudio.qualitytools.resource.dll.

Действия немного отличаются при выполнении в VSTS. Необходимо настроить параметры локального тестового запуска, чтобы скопировать неуправляемые зависимости. Для этого перейдите к следующему разделу:

  • Тестовое> изменение конфигураций тестового> запуска локальных тестов
  • Щелкните Deployment.Enter библиотеки DLL, которые необходимо скопировать для каждого теста:
    • Wex.Logger.dll
    • Wex.Common.dll
    • Wex.Common.Managed.dll
    • Wex.Communication.dll
    • Wex.Logger.Interop.dll

Это необходимо из-за того, что VSTS создает новый каталог и копирует файлы при каждом запуске тестовых случаев. Эти каталоги можно просмотреть на компьютере как папку с братом в папку проекта.

Выполнение управляемых тестов в домене приложения по умолчанию

По умолчанию для изоляции кода тестирования TAEF выполняет управляемые тесты в специальном домене тестового приложения. Однако при использовании доменов приложений, отличных от по умолчанию, сценарии, в которых машинный код вызывает управляемый код (например, собственные функции обратного вызова, потребляемые управляемым кодом), могут вызывать ошибки с сообщением: "Не удается передать GCHandle через AppDomains". Для этих сценариев принудительное выполнение управляемых тестов в домене приложения по умолчанию с помощью переключателя /defaultAppDomain .

Обратите внимание, что выполнение управляемых тестов в домене приложения по умолчанию несовместимо с файлами конфигурации сборки.

Поддержка асинхронных методов тестирования

Двоичные файлы NETFX 4.5 TAEF поддерживают выполнение асинхронных методов тестирования TAEF. Это означает, что тесты TAEF, помеченные асинхронным ключевое слово, могут ожидать асинхронные операции.

Примечание. Не пытайтесь использовать эту функцию с двоичными файлами NetFX 2.0/3.5. Только двоичные файлы NetFX 4.5 поддерживают эту функцию.

TAEF поддерживает как асинхронные методы тестирования void, так и асинхронные тесты задач (оба приводят к одинаковым функциям):

[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);
}