Максимальное значение TAEF
Платформа разработки и выполнения тестов предоставляет мощную платформу для создания и выполнения тестов. Было бы полезно понять некоторые закулисные детали функционирования TAEF, чтобы максимально эффективно использовать его. На этой странице рассматриваются некоторые советы и функции, которые помогут вам создать тесты для оптимизации и максимально эффективного использования возможностей TAEF. Убедитесь, что вы знакомы с основами разработки и выполнения тестов с помощью TAEF.
Методы настройки (или инициализации) и очистки
Методы установки и очистки на уровне сборки (также называемые средствами) выполняются один раз для каждого выполнения библиотеки DLL. Аналогичным образом методы установки и очистки на уровне класса выполняются один раз для каждого класса. Методы настройки и очистки на уровне теста одинаковы для всех тестов в классе и вызываются один раз до и после каждого теста в классе.
В каждой сборке может быть только один метод установки и очистки на уровне сборки, один метод установки и очистки на уровне класса, а также один метод установки и очистки теста для каждого класса. Обратите внимание, что методы установки и очистки классов являются статическими в управляемом коде, но не являются статическими в коде C++.
Если исключения включены (вариант по умолчанию), выполнение любого метода завершается при первом вызове Verify, который завершается ошибкой. Если вы явно отключили вызовы проверки на основе исключений (дополнительные сведения см. в разделе Проверка статьи Создание тестов), вам потребуется явные условные инструкции для управления потоком управления после сбоя вызова Verify.
В случае, когда сбой происходит в методе установки (путем ошибки проверки на основе исключений или путем явного возврата ошибки программой установки), последующие тесты считаются заблокированными и регистрируются как таковые. Например, если метод установки на уровне класса завершается сбоем, все методы теста в классе считаются заблокированными, и каждый из них будет регистрироваться как таковой. Кроме того, метод Cleanup не будет вызываться, если сбой происходит в методе установки.
Метод теста
Явно регистрировать результаты теста не требуется. Если все вызовы Verify в тесте успешно выполнены, тест будет регистрироваться как "Пройдено". При первом вызове Verify, который завершается сбоем, выполнение метода тестирования завершится (если вы явно не отключили вызовы проверки на основе исключений. В этом случае условные инструкции будут определять поток управления там после, но независимо от следующих удержаний), и тест будет помечен как "Сбой".
Аналогичным образом, если у вас есть оболочка VERIFY (зависит от типа возвращаемого значения и от того, что определяет успешность) вокруг вызова вспомогательного метода, вам не нужно явно проверка и регистрировать его результат.
Указание метаданных
Поиск метаданных является иерархическим. Это означает, что если оператор select имеет значение /select:"@Priority=2", а в TestMethod не указан параметр Priority, 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.
В случае тестов на основе таблиц, управляемых данными, вы можете сделать это еще дальше и переопределить метаданные уровня теста, указав их на уровне строк. Дополнительные сведения см. в разделе Метаданные Пример теста, управляемого данными .