경량 데이터 기반 테스트

전체 XML DataSource 및 테이블 기반 데이터 기반 테스트가 테스트 시나리오 요구 사항에 비해 너무 많을 수 있는 시나리오가 있을 수 있습니다. 경량 데이터 기반 테스트를 사용하면 테스트에 대한 데이터가 간단하고 메타데이터로 쉽게 표현할 수 있는 경우 데이터 기반 테스트 지원을 빠르고 쉽게 얻을 수 있습니다. 예제를 사용하고 방법을 살펴보겠습니다.

경량 데이터 기반 테스트에 대한 데이터는 메타데이터 집합(테스트, 클래스 또는 모듈 수준)으로 표현됩니다. 이 집합의 각 값에 대해 관련된 설정 및 해체 메서드와 함께 관련된 테스트 메서드가 집합의 각 값에 대해 실행됩니다. 네이티브 코드에서 이를 작성하는 방법을 살펴보겠습니다.

1  #include "WexString.h"
2  #include "WexTestClass.h"
3
4  using namespace WEX::Common;
5  using namespace WEX::TestExecution;
6  using namespace WEX::Logging;

7  namespace WEX { namespace TestExecution { namespace Examples
8  {
9      class SimpleDataDrivenExample
10     {
11         TEST_CLASS(SimpleDataDrivenExample);
12         ...
13         BEGIN_TEST_METHOD(SetsOfDataTest)
14             TEST_METHOD_PROPERTY(L"Data:Color", L"{Purple, Maroon, Brown}")
15         END_TEST_METHOD()
16     };

줄 14의 TEST_METHOD_PROPERTY 매개 변수 값을 확인합니다. 테스트 메타데이터 값은 "{"로 시작하고 쉼표 또는 세미콜론으로 구분된 값 목록이 지정되었음을 나타내는 "}"으로 끝납니다. TAEF는 이 집합의 각 값에 대해 관심 있는 테스트 메서드인 SetsOfDataTest()를 한 번 다시 실행합니다.

또한 메타데이터 이름은 "Data:"로 시작합니다. 이는 메타데이터 집합이 실제로 데이터 기반 테스트 매개 변수에 대한 변형을 지정하고 있으며 다음과 같이 테이블 기반 데이터 기반 테스트의 데이터 매개 변수와 마찬가지로 실제 테스트 메서드에서 사용할 수 있음을 의미합니다.

11     ...
12
13     void SimpleDataDrivenExample::SetsOfDataTest()
14     {
15         String color;
16         if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
17         {
18             Log::Comment(L"Color retrieved was " + color);
19         }
20     }
21 } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

관리 코드로 작업하는 동안 데이터 집합의 사양 및 검색은 네이티브 예제와 매우 유사합니다. 이 형식에 대해 살펴보겠습니다.

1  namespace WEX.Examples
2  {
3      using Microsoft.VisualStudio.TestTools.UnitTesting;
4      using System;
5      using System.Collections;
6      using System.Data;
7      using WEX.Logging.Interop;
8      using WEX.TestExecution;
9
10     [TestClass]
11     public class CSharpDataDrivenSimpleExample
12     {
13         ...
14         [TestMethod]
15         [TestProperty("Data:Color", "{Red, Green, Blue}")]
16         public void SetsOfMetadataTest()
17         {
18             Log.Comment("Color is " + m_testContext.DataRow["Color"]);
19         }
20
21         public TestContext TestContext
22         {
23             get { return m_testContext; }
24             set { m_testContext = value; }
25         }
26
27         private TestContext m_testContext;
28     }
29 }

테이블 기반 데이터 기반 테스트의 경우와 마찬가지로 메타데이터로 지정된 데이터 집합은 TestContext.DataRow를 통해 검색을 허용합니다.데이터 기반 테스트 경량을 유지하기 위해 매개 변수 형식은 항상 WEX::Common::String(네이티브 코드) 및 String(관리 코드)입니다.

여러 데이터 값이 지정된 경우 가능한 모든 값의 카티전 곱을 가져오고 각 조합에 대해 테스트 메서드가 호출됩니다.

또한 동일한 테스트 메서드에 대해 지정된 데이터 집합뿐만 아니라 일부 메타데이터 집합(예: ThreadingModel 메타데이터 집합)도 포함할 수 있습니다. 이러한 경우 모든 메타데이터 집합 및 데이터 집합의 결합 확장은 TAEF에 의해 생성되며, 우려되는 테스트 메서드는 모든 조합으로 호출됩니다.

특수 사례 - 메타데이터 또는 데이터 집합을 사용하는 데이터 기반 테스트

테이블 기반 데이터 기반 테스트에 종속된 테스트 메서드를 가질 수 있을 뿐만 아니라 데이터 또는 메타데이터 집합을 지정할 수도 있습니다. 예를 들어 테스트 메서드는 테이블 기반 데이터 기반 테스트에 매개 변수 "size" 및 "color"를 지정하고 "투명도" 매개 변수를 true로 설정한 다음 false로 설정하여 모든 행을 한 번 실행하도록 할 수 있습니다. 이 경우 "투명도"를 데이터 기반 테스트에 대한 집합 "{true, false}"로 지정할 수 있습니다. 메타데이터 집합에서 매개 변수가 충돌할 경우 테이블 기반 데이터 기반 행에서 행 수준 매개 변수 형식과 값이 메타데이터 집합 값을 재정의한다는 점에 유의해야 합니다.

데이터/메타데이터 집합을 사용하여 테스트 실행

데이터 집합을 포함하는 테스트 실행은 매우 직관적입니다. 예제 테스트에 대한 /listproperties 출력을 살펴보겠습니다.

1   te Examples\CPP.DataDriven.Example.dll /name:*SetsOfDataTest* /listproperties
2
3   Test Authoring and Execution Framework v2.9.3k for x64
4
5           f:\ Examples\CPP.SimpleDataDriven.Example.dll
6               WEX::TestExecution::Examples::SimpleDataDrivenExample<
7                   WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
8                           Property[Data:Color] = {Purple, Maroon, Brown}
9
10                          Data[Color] = Purple
11
12                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
13                          Property[Data:Color] = {Purple, Maroon, Brown}
14
15                          Data[Color] = Maroon
16
17                  WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
18                          Property[Data:Color] = {Purple, Maroon, Brown}
19
20                          Data[Color] = Brown

위의 예제에서 줄 7, 12 및 17을 확인합니다. 메타데이터 집합 인덱스가 데이터 집합의 값을 사용하여 테스트 메서드의 각 호출에 추가됩니다. 이 인덱스는 다음과 같은 형식입니다.

<namespace qualified test method name>#metadataSet<metadataIndex>

8, 13, 18줄에는 이 경량 데이터 기반 테스트 지원에 지정된 메타데이터 집합이 표시됩니다. 이 경우 세트는 보라색, 적갈색 및 갈색으로 구성됩니다. 줄 10, 15 및 20은 테스트의 현재 호출에 활성 상태인 이 집합의 실제 값을 표시합니다. SetsOfMetadataTest#metadataSet1의 경우 이 메서드의 두 번째 호출인 집합의 활성 매개 변수 값은 "Maroon"입니다.

테이블 기반 데이터 기반 테스트에서와 마찬가지로 데이터 값 또는 이름을 선택할 수 있습니다. 예를 들어 /select:'Maroon' 또는 /name:@Data:Color=*#metadataSet1 같은 선택 쿼리로 SetsOfDataTest#metadataSet1을 선택할 수 있습니다.

빠른 참조를 위해 관리 테스트 예제의 /listproperties 출력은 다음과 같습니다.

te Examples\CSharp.DataDriven.Example.dll /name:*SetsOfMetadataTest* /listproperties

Test Authoring and Execution Framework v2.9.3k for x64

        f:\ Examples\CSharp.DataDrivenSimple.Example.dll
            WEX.Examples.CSharpDataDrivenSimpleExample
                WEX.Examples.CSharpDataDrivenSimpleExample.NonDataDrivenTest
                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet0
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Red

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet1
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Green

                WEX.Examples.CSharpDataDrivenSimpleExample.SetsOfMetadataTest#metadataSet2
                        Property[Data:Color] = {Red, Green, Blue}

                        Data[Color] = Blue