Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Architektura vytváření a spouštění testů poskytuje výkonnou platformu pro vytváření a spouštění testů. Mohlo by být užitečné pochopit některé zákulisní funkční podrobnosti TAEF, abychom z toho vytěžili maximum. Tato stránka popisuje některé tipy a funkce, které vám pomůžou vytvářet testy pro optimalizaci a využít co nejvíce z toho, co TAEF nabízí. Ujistěte se, že znáte základy vytváření a provádění testů pomocí taEF.
Metody nastavení (nebo inicializace) a vyčištění
Metody nastavení a čištění na úrovni sestavení (označované také jako přípojky) se spustí jednou za spuštění knihovny DLL. Podobně se metody nastavení a čištění na úrovni třídy spustí jednou pro každou třídu. Metody nastavení a čištění na úrovni testu jsou stejné pro všechny testy v rámci třídy a jsou vyvolány jednou před a po každém testu ve třídě.
Pro každé sestavení může existovat pouze jedna metoda nastavení a čištění na úrovni sestavení, jedna metoda nastavení a čištění na úrovni třídy a jedna metoda testovacího nastavení a čištění na třídu. Všimněte si, že metody nastavení a čištění tříd jsou statické ve spravovaném kódu, ale nejsou statické v kódu jazyka C++.
Pokud jsou povoleny výjimky (výchozí případ), spuštění jakékoli metody je ukončeno při prvním volání Verify, které selže. Pokud jste explicitně zakázali ověřovací volání založená na výjimkách (podrobnosti najdete v části Ověření testů), budete muset mít explicitní podmíněné příkazy pro řízení toku programu, jakmile se volání ověření nezdaří.
V případě, že k selhání dojde v metodě nastavení (buď prostřednictvím potvrzení selhání na základě výjimky, nebo explicitním vrácením selhání), testy, které se měly provést, jsou považovány za „blokované“ a jsou tak zaznamenány. Pokud například vaše metoda nastavení na úrovni třídy selže, všechny testovací metody ve třídě jsou považovány za blokované a každý z nich bude protokolován jako takový. Kromě toho se metoda Cleanup nevyvolá, pokud dojde k selhání v metodě instalace.
Testovací metoda
Není nutné explicitně protokolovat výsledek testu. Pokud všechna volání ověření ve vašem testu proběhla úspěšně, test bude zaznamenán jako "Úspěšný". Při prvním volání Ověření, které selže, se spuštění testovací metody ukončí (není-li výslovně zakázáno volání Ověření založené na výjimkách - v takovém případě vaše podmíněné příkazy určí tok řízení, ale bez ohledu na to platí následující) a test bude označen jako "Neúspěšný".
Podobně, pokud máte obal ověření (závisí na návratovém typu a na tom, co určuje úspěch) kolem volání pomocné metody, nebudete muset explicitně zkontrolovat a zapsat jeho výsledek.
Určení metadat
Vyhledávání metadat je hierarchické. To znamená, že pokud je příkaz select /select:"@Priority=2" a pokud testMethod nezadá Prioritu, taEF vyhledá třídu, která ji obsahuje. Pokud metadata na úrovni třídy nezadávají konkrétní údaj, TAEF se podívá na úroveň sestavení.
Pokud tedy chcete, aby všechny testy ve třídě nebo většina testů měly stejnou "Prioritu" nebo stejného „Vlastníka“, můžete to dosáhnout tím, že je nastavíte na úrovni třídy. U jednoho nebo několika testů, které jsou výjimkou tohoto pravidla, můžete explicitně zadat metadata na úrovni TestMethod. Podrobnosti najdete v následujícím testu:
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 */
POZNÁMKA: U spravovaných testů se vytváření provádí podobně. Úroveň modulu je stejná jako označení na úrovni sestavení ve spravovaném prostředí. cs-CZ: Pro specifikaci metadat na úrovni sestavení nebo třídy ve spravovaném kódu je nutné poskytnout značení před statickými metodami inicializátoru. To může znamenat, že pokud ve vašem testu ještě žádný není, budete muset zadat prázdný inicializátor. Tento návrh je speciálně vytvořený tak, aby byl zajištěna kompatibilita VSTS.
V případě testů založených na datech založených na tabulce můžete provést tento krok dále a přepsat metadata na úrovni testu tak, že je zadáte na úrovni řádku. Podrobnosti najdete v příkladu přepsání testu řízeného daty pomocí metadat.