다음을 통해 공유


TAEF를 최대한 활용

테스트 작성 및 실행 프레임워크는 테스트를 작성하고 실행할 수 있는 강력한 플랫폼을 제공합니다. 이를 최대한 활용하기 위해 TAEF의 세부 정보를 작동하는 몇 가지 비하인드 스토리를 이해하는 것이 도움이 될 수 있습니다. 이 페이지에서는 테스트를 작성하여 TAEF가 제공하는 기능을 최적화하고 최대한 활용하는 데 도움이 되는 몇 가지 팁과 기능에 대해 설명합니다. TAEF를 사용하여 테스트 작성 및 실행의 기본 사항을 잘 알고 있는지 확인하세요.

메서드 설정(또는 초기화) 및 정리 방법

어셈블리 수준( 비품이라고도 함)의 설정 및 정리 메서드는 DLL 실행당 한 번 실행됩니다. 마찬가지로 클래스 수준 설정 및 정리 메서드는 클래스당 한 번 실행됩니다. 테스트 수준 설정 및 정리 메서드는 클래스 내의 모든 테스트에 대해 동일하며 클래스의 모든 테스트 전후에 한 번 호출됩니다.

어셈블리당 하나의 어셈블리 수준 설정 및 정리 메서드, 클래스당 하나의 클래스 수준 설정 및 정리 메서드, 클래스당 하나의 테스트 설정 및 정리 메서드가 있을 수 있습니다. 클래스 설정 및 정리 메서드는 관리 코드에서 정적이지만 C++ 코드에서는 정적이지 않습니다.

예외가 사용하도록 설정된 경우(기본 사례) 실패한 첫 번째 Verify 호출에서 메서드의 실행이 종료됩니다. 예외 기반 Verify 호출을 명시적으로 사용하지 않도록 설정한 경우(자세한 내용은 테스트 작성의 확인 섹션 참조) Verify 호출이 실패한 후 제어 흐름을 제어하기 위한 명시적 조건문이 있어야 합니다.

설치 방법에서 오류가 발생하는 경우(예외 기반 확인 실패를 통해 또는 명시적으로 오류를 반환하는 설정을 통해) 수행해야 하는 테스트는 "차단됨"으로 간주되고 기록됩니다. 예를 들어 클래스 수준 설치 메서드가 실패하면 클래스의 모든 테스트 메서드가 "차단됨"으로 간주되고 각 테스트 메서드는 이와 같이 기록됩니다. 또한 Setup 메서드에서 오류가 발생하면 Cleanup 메서드가 호출되지 않습니다.

테스트 방법

테스트 결과를 명시적으로 기록할 필요는 없습니다. 테스트의 모든 Verify 호출이 성공하면 테스트가 "통과됨"으로 기록됩니다. 실패하는 첫 번째 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 호환성을 보장하기 위해 특별히 제작되었습니다.

테이블 기반 데이터 기반 테스트의 경우 이 단계를 한 단계 더 수행하고 행 수준에서 지정하여 테스트 수준 메타데이터를 재정의할 수 있습니다. 자세한 내용은 메타데이터 재정의 데이터 기반 테스트 예제 를 참조하세요.