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


Максимальное использование TAEF

Тестовая платформа разработки и выполнения предоставляет мощную платформу для разработки и выполнения тестов. Будет полезно понять некоторые закулисные аспекты функционирования TAEF, чтобы наиболее эффективно использовать его. На этой странице рассматриваются некоторые советы и функции, которые помогут вам разработать тесты для их оптимизации и максимального использования возможностей, предоставляемых TAEF. Убедитесь, что вы знакомы с основами разработки и выполнения тестов с помощью TAEF.

настройка (или инициализация) и методы очистки

Методы установки и очистки на уровне сборки (также известные как фикстуры) выполняются один раз за выполнение библиотеки DLL. Аналогичным образом методы настройки и очистки уровня класса выполняются один раз для каждого класса. Методы установки и очистки уровня тестирования одинаковы для всех тестов в классе и вызываются один раз до и после каждого теста в классе.

На уровне сборки может быть только один метод установки и очистки, на уровне класса — один метод установки и очистки для каждого класса, и на уровне теста — один метод установки и очистки для каждого класса. Обратите внимание, что методы установки и очистки классов являются статическими в управляемом коде, но не являются статическими в коде C++.

Если исключения включены (в случае по умолчанию), выполнение любого метода завершается при первом вызове Verify, который завершается сбоем. Если вы явно отключили вызовы проверки на основе исключений (см. раздел "Проверка" в разделе "Тесты разработки" для получения подробных сведений), вам потребуется явные условные инструкции для управления потоком управления после сбоя вызова Проверки.

В случае, когда сбой происходит в методе установки (путем сбоя на основе исключений или путем явной установки, возвращающей сбой), последующие тесты считаются заблокированными и регистрируются как таковые. Например, если метод установки уровня класса завершается сбоем, все методы теста в классе считаются заблокированными, и каждый из них будет зарегистрирован как таковой. Помимо этого, метод очистки не будет вызываться, если сбой происходит в методе установки.

Метод тестирования

Не требуется явно регистрировать результат теста. Если все вызовы проверки в тесте выполнены успешно, тест будет отмечен как "Пройден". При первом вызове проверки, завершающемся сбоем, выполнение метода теста завершится (если вызовы проверки на основе исключений явно отключены, в этом случае условные операторы будут определять поток управления, но в любом случае следующая проверка справедлива), и тест будет помечен как "Неудача".

Аналогичным образом, если у вас есть обертка VERIFY (в зависимости от типа возвращаемого значения и отслеживаемых критериев успеха) вокруг вызова вспомогательного метода, вам не придется явно проверять и логировать его результат.

определение метаданных

Поиск метаданных является иерархическим. Это означает, что оператор select имеет значение /select:"@Priority=2", а если testMethod не задает приоритет, TAEF будет искать класс, содержащий его. Если метаданные уровня класса не указывают его, TAEF ищет на уровне сборки.

Таким образом, если вы хотите, чтобы все или большинство тестов в классе имели одинаковый "Приоритет" или "Владелец", это можно сделать, просто указав их на уровне класса. Для одного или нескольких тестов, которые являются исключением из этого правила, можно явно указать метаданные на уровне TestMethod. Дополнительные сведения см. в следующем тесте:

1    namespace WEX { namespace UnitTests { namespace Samples
2    {
3        //
4        // Declare module level properties
5        //
6        BEGIN_MODULE() //This metadata applies to all the classes and tests in this module or assembly
7            MODULE_PROPERTY(L"GroupOwner", L"SomeGroup")
8        END_MODULE()
9        class PremiumBankAccountTests
10       {
11           //
12           // Declare this class to be a test class with an'advanced' declaration
13           // Use advanced declaration when you want to set metadata on the class
14           //
15           BEGIN_TEST_CLASS(PremiumBankAccountTests) //This metadata applies to all the test in this class
16               TEST_CLASS_PROPERTY(L"Priority", L"2")
17               TEST_CLASS_PROPERTY(L"DevOwner", L"Someone")
18               TEST_CLASS_PROPERTY(L"PMOwner", L"Someone")
19           END_TEST_CLASS()
20           //
21           // Declare class setup - a method that runs after class constructor
22           // and before any test class methods and test setup method
23           //
24           TEST_CLASS_SETUP(SetDefaultAccountType);
25           //
26           // Declare class cleanup - a methods that runs after all the class test methods and test setup method
27           // and before the class destructor
28           //
29           TEST_CLASS_CLEANUP(ResetDefaultAccountType);
30           //
31           // Declare test setup and cleanup - methods that run before and after the execution
32           // of every test method correspondingly
33           //
34           TEST_METHOD_SETUP(CreateBankAccount);
35           TEST_METHOD_CLEANUP(DestroyBankAccount);
36           //
37           // Declare test methods with an 'advanced' declaration
38           // Use advanced declaration when you want to set metadata on the methods
39           //
40           BEGIN_TEST_METHOD(DebitTest)
41               TEST_METHOD_PROPERTY(L"BVT", L"TRUE")
42               TEST_METHOD_PROPERTY(L"PERF", L"TRUE")
43               TEST_METHOD_PROPERTY(L"STRESS", L"FALSE")
44               TEST_METHOD_PROPERTY(L"Priority", L"1") //Overrides the Class level Priority value
45           END_TEST_METHOD()
46           BEGIN_TEST_METHOD(CreditTest)
47               TEST_METHOD_PROPERTY(L"BVT", L"TRUE")
48               TEST_METHOD_PROPERTY(L"PERF", L"FALSE")
49               TEST_METHOD_PROPERTY(L"STRESS", L"TRUE")
50               TEST_METHOD_PROPERTY(L"GroupOwner", L"SomeGroupTest") //Overrides the GroupOwner specified at the Module level
51           END_TEST_METHOD()
52   
53           std::unique_ptr<BankAccount> m_spBankAccount;
54           BankAccountType m_defaultType;
55       };
56   } /* namespace Samples */ } /* namespace UnitTests */ } /* namespace WEX */

ПРИМЕЧАНИЕ. Для управляемых тестов разработка выполняется аналогично. Уровень модуля совпадает с разметкой уровня сборки в управляемой среде. Для указания спецификации метаданных уровня сборки или класса в управляемом коде разметку следует предоставить перед статическими методами инициализации. Это может означать, что потребуется предоставить пустой инициализатор, если в вашем тесте его еще нет. Эта конструкция специально создается для обеспечения совместимости VSTS.

В случае тестов на основе таблиц, управляемых данными, вы можете пойти еще дальше и переопределить метаданные уровня теста, указав их на уровне строки. См. Метаданные, переопределяющие пример теста на основе данных, для получения подробной информации.