단순 데이터 기반 테스트 예제

이 섹션에서는 데이터 기반 테스트의 몇 가지 예제를 설명하고 각 예제의 특정 기능을 다룹니다.

첫 번째 예제는 SimpleDataDrivenExample이라는 기본 데이터 기반 테스트입니다.

관리되는 예제에서는 다음과 같은 XML 파일을 찾을 수 있습니다.

    1  <?xml version="1.0"?>
    2  <Data>
    3    <Table Id="Table1">
    4      <ParameterTypes>
    5        <ParameterType Name="Size">Int32</ParameterType>
    6        <ParameterType Name="Color">String</ParameterType>
    7      </ParameterTypes>
    8      <Row>
    9        <Parameter Name="Size">4</Parameter>
    10       <Parameter Name="Color">White</Parameter>
    11     </Row>
    12     <Row>
    13       <Parameter Name="Size">10</Parameter>
    14       <Parameter Name="Color">Black</Parameter>
    15     </Row>
    16     <Row>
    17       <Parameter Name="Size">9</Parameter>
    18       <Parameter Name="Color">Orange</Parameter>
    19     </Row>
    20     <Row>
    21       <Parameter Name="Size">9</Parameter>
    22       <Parameter Name="Color">Blue</Parameter>
    23     </Row>
    24   </Table>
    25 </Data>

이 XML 파일은 사용할 데이터 기반 테스트에 대한 데이터 매개 변수를 정의합니다. 최상위 XML 노드는 데이터> 태그로<, 데이터 태그 내에 정의된 테이블> 태그가 하나 이상 < 포함될 수 있습니다. 모든 테이블은 고유한 "ID" 특성과 연결되어야 합니다. 테스트 함수는 테이블 ID 값을 사용하여 XML 파일에서 사용할 특정 Table을 식별합니다.

<테이블> 태그 내에는 선택적 <ParameterTypes 섹션이 있습니다>. 여기서는 ParameterTypes 태그를 사용하여< 지정된 매개 변수의 데이터 형식을> 명시적으로 지정할 수 있습니다. 위의 예제에서는 매개 변수 "Size"가 "Int32" 형식이고 매개 변수 "Color"가 문자열임을 명시적으로 지정합니다. 요약하자면: ParameterTypes 섹션은 선택 사항입니다. 기본적으로 매개 변수 형식 정보가 제공되지 않으면 문자열로 저장됩니다.

관리되는 예제와 네이티브 예제를 비교하면 두 예제의 유일한 차이점은 ParameterTypes> 블록입니다<. 네이티브 XML 파일은 크기를 네이티브 정수 형식 "int"로 지정하고 기본 형식인 WEX::Common::String을 지정하지 않고 Color의 형식으로 사용합니다. 편의를 위해 다음 예제에서는 네이티브 예제의 XML 파일을 보여 주세요.

    1  <?xml version="1.0"?>
    2  <Data>
    3    <Table Id="SimpleTable">
    4      <ParameterTypes>
    5        <ParameterType Name="Size">int</ParameterType>
    6      </ParameterTypes>
    7      <Row>
    8        <Parameter Name="Size">4</Parameter>
    9        <Parameter Name="Color">White</Parameter>
    10     </Row>
    11     <Row>
    12       <Parameter Name="Size">10</Parameter>
    13       <Parameter Name="Color">Black</Parameter>
    14     </Row>
    15     <Row>
    16       <Parameter Name="Size">9</Parameter>
    17       <Parameter Name="Color">Orange</Parameter>
    18     </Row>
    19     <Row>
    20       <Parameter Name="Size">9</Parameter>
    21       <Parameter Name="Color">Blue</Parameter>
    22     </Row>
    23   </Table>
    24 </Data>

네이티브관리 코드에서 지원되는 매개 변수 형식은 테이블 데이터 원본의 매개 변수 형식에 나열됩니다.

다른 데이터 형식이 지정된 경우 테스트는 경고를 throw하고 문자열로 간주합니다.

XML 파일로 계속 돌아가면 두 XML 파일<의 ParameterTypes> 블록 다음에는 각각 관리되는 예제와 네이티브 예제의 데이터 집합에 해당하는 동일한 행>집합<이 있습니다. 이 경우 각각 매개 변수> 태그를 사용하여 매개 변수 값을 지정하는 4개의 행 블록으로 정의된 4개의 데이터 집합이< 있습니다.<>

데이터 원본 파일의 다양한 부분의 기본 사항을 다룹니다. 이제 위의 XML 파일에서 지정한 값을 검색하는 방법을 살펴보겠습니다.

데이터 기반 테스트로 테스트 작성

이제 데이터를 지정했으므로 데이터를 사용하는 코드 또는 테스트 메서드를 XML 파일의 이 데이터와 연결하는 방법이 필요합니다. "DataSource" 메타데이터를 지정하여 관리되는 예제와 네이티브 예제 모두에서 이 작업을 수행합니다. DataSource 메타데이터에는 다음과 같은 세 부분이 있습니다.

  1. 'Table:' - 데이터 원본을 XML 테이블로 식별합니다.
  2. 'DataDrivenTests.xml' - XML 테이블이 포함된 파일입니다.
  3. '#Table2' - '#' 구분 기호에 따라 'Table2' 값은 사용할 XML 문서 내의 특정 테이블을 식별합니다. 단일 XML 테이블 데이터 원본에는 여러 테이블이 포함될 수 있습니다. TAEF는 지정된 값과 일치하는 'Id' 특성이 있는 Table 요소에 대한 XML 파일을 살펴봅니다.

다시 한 번 위의 측면을 다루는 코드를 간단히 살펴보겠습니다.

네이티브 코드

1   class SimpleDataDrivenExample
2   {
3      BEGIN_TEST_CLASS(SimpleDataDrivenExample)
4        TEST_CLASS_PROPERTY(L"Description", L"Simple example in table-based data-driven tests")
5      END_TEST_CLASS()
6   
7      TEST_METHOD_CLEANUP(TestCleanup);
8      TEST_METHOD_SETUP(TestSetup);
9    
10     BEGIN_TEST_METHOD(DataDrivenTest)
11       TEST_METHOD_PROPERTY(L"DataSource", L"Table:SimpleDataDrivenExample.xml#SimpleTable")
11     END_TEST_METHOD()
12     ...

관리 코드

    1 [TestMethod]
    2 [DataSource("Table:CSharpDataDrivenSimpleExample.xml#SimpleTable")]
    3 public void DataDrivenTest()
    4 {
    5  ...
    6 }

"DataSource"는 Microsoft.VisualStudio.TestTools.UnitTesting의 알려진 속성입니다.

위의 단계 외에도 관리 코드에서 데이터 기반 테스트를 위한 몇 가지 추가 단계가 필요합니다. 프라이빗 TestContext 속성도 정의해야 합니다. 자세한 내용은 TestContext 클래스를 참조하세요. 또한 이 속성에 대한 공용 평가자를 정의합니다. 내부적으로 TAEF는 이 TestContext 속성을 설정하므로 이를 통해 데이터에 액세스할 수 있습니다. 코드의 이 부분을 간단히 살펴보겠습니다.

    1 public TestContext TestContext
    2 {
    3     get;
    4     set;
    5 }

Test 메서드에서 데이터 검색

검색 API는 관리 코드와 네이티브 코드에서 다릅니다. 먼저 네이티브 검색 API를 이해하겠습니다.

    1  void SimpleDataDrivenExample::DataDrivenTest()
    2  {
    3          int size;
    4          if (SUCCEEDED(TestData::TryGetValue(L"size", size)))
    5          {
    6              VERIFY_ARE_NOT_EQUAL(size, 0);
    7              Log::Comment(String().Format(L"Size retrieved was %d", size));
    8          }
    9
    10         String color;
    11         if (SUCCEEDED(TestData::TryGetValue(L"color", color)))
    12         {
    13             Log::Comment(L"Size retrieved was " + color);
    14         }
    15
    16         unsigned int index;
    17         if (SUCCEEDED(TestData::TryGetValue(L"index", index)))
    18         {
    19             Log::Comment(String().Format(L"At index %d", index));
    20         }
    21 }

4, 11, 17줄에 특히 주의하세요. 이러한 각 줄 앞에 검색할 데이터를 저장할 지역 변수를 정의합니다. 형식을 바로 여기에서 가져오는 것이 중요합니다. XML 파일에서 "크기"를 "int" 형식으로 정의했기 때문에 int 형식의 로컬 변수를 정의하여 검색해야 합니다. 검색 API는 매개 변수의 이름을 사용하여 첫 번째 매개 변수로 String 값으로 검색합니다. 두 번째 매개 변수는 참조로 전달되고 TAEF 코드로 설정된 지역 변수입니다.

이 검색 API는 TestData.h 에 정의되며 모든 TAEF 테스트에 포함된 WexTestClass.h 헤더에 포함되어 있습니다.

관리 코드에서 데이터를 검색하려면 정의한 TestContext 속성을 사용합니다. 아래 코드(또는 예제)를 살펴보세요.

    1  public void DataDrivenTest()
    2  {
    3     int size = (int)m_testContext.DataRow["Size"];
    4     Verify.AreNotEqual(size, 0);
    5     Log.Comment("Size is " + size.ToString());
    6
    7     Log.Comment("Color is " + m_testContext.DataRow["Color"]);
    8     UInt32 index = (UInt32)m_testContext.DataRow["Index"];
    9     Log.Comment("At index " + index.ToString());
    10 }

VSTS에 익숙한 경우 위의 예제가 비슷하다는 것을 알게 될 것입니다. DataRow를 사용하고 열 이름을 검색하려는 매개 변수의 이름으로 지정합니다.

예제를 살펴보면 동일한 클래스에 데이터 기반이 아닌 테스트도 있습니다. 즉, 동일한 테스트 클래스에서 DataDriven 및 NonDataDriven 테스트를 유연하게 결합할 수 있습니다.

TAEF를 사용하여 SimpleDataDrivenExample 실행

TAEF를 사용하여 DataDrivenTests를 실행하는 팁과 요령으로 시작하기 전에 데이터 기반 테스트를 작성하는 방법과 TAEF를 사용하여 테스트를 실행하는 방법을 알고 있어야 합니다. 선택 항목이 TAEF에서 작동하는 방식에 대한 메모리를 새로 고치는 것이 유용할 수 있습니다.

데이터 기반 테스트를 실행하기 위한 명령 프롬프트는 TAEF를 사용하여 제네릭 테스트를 실행하는 경우와 다르지 않습니다. 위에서 설명한 두 예제(네이티브 및 관리형)를 모두 실행하려면 다음 명령을 실행하기만 하면 됩니다.

TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple*

'/name'은 이름에 따라 선택 조건을 추가하고 관심 있는 클래스만 선택합니다. 클래스 내에서 실행할 테스트를 선택하려면 먼저 dll의 모든 속성을 나열해야 합니다. 그런 다음 선택 조건에 사용할 속성을 결정할 수 있습니다.

TE.exe Examples\CPP.DataDriven.Example.dll Examples\CSharp.DataDriven.Example.dll /name:*Simple* /listproperties
f:\Examples\CPP.DataDriven.Example.dll
        WEX::TestExecution::Examples::SimpleDataDrivenExample
                Property[Description] = Simple example in table-based data-driven tests

            WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#0
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable

                    Data[Color] = White
                    Data[Size] = 4

            WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable

                    Data[Color] = Black
                    Data[Size] = 10

            WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#2
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable

                    Data[Color] = Orange
                    Data[Size] = 9

            WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#3
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[DataSource] = Table:SimpleDataDrivenExample.xml#SimpleTable

                    Data[Color] = Blue
                    Data[Size] = 9

            WEX::TestExecution::Examples::SimpleDataDrivenExample::FirstNonDataDrivenTest
                    Setup: TestSetup
                    Teardown: TestCleanup

            WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet0
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[Data:Color] = {Purple, Maroon, Brown}

                    Data[Color] = Purple

            WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet1
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[Data:Color] = {Purple, Maroon, Brown}

                    Data[Color] = Maroon

            WEX::TestExecution::Examples::SimpleDataDrivenExample::SetsOfDataTest#metadataSet2
                    Setup: TestSetup
                    Teardown: TestCleanup
                    Property[Data:Color] = {Purple, Maroon, Brown}

                    Data[Color] = Brown

            WEX::TestExecution::Examples::SimpleDataDrivenExample::SecondNonDataDrivenTest
                    Setup: TestSetup
                    Teardown: TestCleanup


        f:\Examples\CSharp.DataDriven.Example.dll
        WEX.Examples.CSharpDataDrivenSimpleExample
                Setup: MyClassInitialize
                Property[Description] = Simple example in table-based data-driven tests

            WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#0
                    Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable

                    Data[Color] = White
                    Data[Size] = 4

            WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1
                    Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable

                    Data[Color] = Black
                    Data[Size] = 10

            WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#2
                    Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable

                    Data[Color] = Orange
                    Data[Size] = 9

            WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#3
                    Property[DataSource] = Table:CSharpDataDrivenSimpleExample.xml#SimpleTable

                    Data[Color] = Blue
                    Data[Size] = 9

            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

지금은 위에 나열된 SetsOfMetadataTest 및 SetsOfDataTest를 무시해 보겠습니다. 이에 대해 궁금한 경우 경량 데이터 기반 테스트에 대해 자세히 알아보세요. 이제 다양한 속성과 데이터 매개 변수 이름 및 값을 확인했으므로 이를 기반으로 특정 테스트를 선택할 수 있습니다. 사용해 보기 및 따라 선택한 항목을 확인합니다.

데이터 기반이 아닌 테스트만 실행하려면 다음을 실행합니다.

TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And not(@DataSource=*)"

이제 색이 "검정"으로 지정된 데이터 기반 테스트만 실행하려면 다음을 실행합니다.

TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' 및 @Data:Color='Black'"

"Color"와 마찬가지로 @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> 는 지정된 DataDriven 매개 변수 값에 따라 특정 데이터를 실행합니다. 위의 경우 WEX::TestExecution::Examples::SimpleDataDrivenExample::D ataDrivenTest#1 및 WEX를 실행합니다. Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1

위의 listproperties에서 테스트 인덱스를 확인합니다. 인덱스도 기반으로 위의 를 선택할 수 있습니다.

TE.exe Examples\CSharp.DataDriven.Example.dll Examples\CPP.DataDriven.Example.dll /select:"@Name='*Simple*' And @Data:Index=1"

위의 테스트는 'Black'이 @Data:Color=선택한 것과 동일한 두 가지 테스트를 실행합니다. @Data:Index lowerGuardValue 및 @Data:index< upperGuardValue를 사용하여 인덱 > 스 선택에 가드를 추가합니다.

TAEF를 사용한 데이터 기반 테스트의 기본 사항을 이해한 경우 행 수준에서 메타데이터 재정의, 배열 매개 변수 형식 지정과 같은 예제에서 다음 클래스를 따릅니다.