배열 지원 데이터 기반 테스트 예제

이 섹션에서는 예제를 통해 데이터 기반 테스트의 몇 가지 고급 기능에 대해 설명합니다. 기본 사항을 계속 다루는 경우 간단한 데이터 기반 예제시작하는 것이 좋습니다.

참조된 예:

  • ArraySupportDataDrivenExample

  • CSharpDataDrivenArraySupportExample

이전 섹션에서는 데이터 기반 테스트 작성 및 실행의 기본 사항을 이미 설명했습니다. 다음 목록에서는 TAEF 데이터 기반 테스트 의미에서 배열의미를 설명합니다.

  • 배열은 단일 매개 변수로 처리되는 가변 길이, 같은 유형의 요소 집합입니다.
  • 배열 형식을 지정하려면 ParameterTypes 블록에서 매개 변수의 형식을 명시적으로 지정하고 Array="true" 특성을 추가해야 합니다.

지원되는 매개 변수 형식은 테이블 데이터 원본의 매개 변수 형식에 나열됩니다.

다른 데이터 형식이 지정된 경우 테스트에서 경고를 throw하고 문자열로 간주합니다. 배열의 경우 데이터 형식은 String[]형식으로 간주됩니다.

다음 예제에서는 매개 변수가 기본 형식 중 하나의 배열임을 지정하는 방법을 보여줍니다. 배열의 경우 허용되는 기본 형식이 없다는 점에 유의해야 합니다. 형식을 명시적으로 지정하고 매개 변수에 대한 Array 특성을 true로 설정해야 합니다.

1  <?xml version="1.0"?>
2  <Data>
3    <Table Id="ArraySupportTable">
4      <ParameterTypes>
5        <ParameterType Name="Size" Array="true">int</ParameterType>
6        <ParameterType Name="Color" Array="true">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">
14         <Value>4</Value>
15         <Value>6</Value>
16         <Value>8</Value>
17       </Parameter>
18       <Parameter Name="Color">
19         <Value>Red</Value>
20         <Value>Green</Value>
21         <Value>Blue</Value>
22       </Parameter>
23     </Row>
24     <Row>
25       <Parameter Name="Size">
26         <Value>9</Value>
27         <Value>12</Value>
28         <Value>16</Value>
29       </Parameter>
30       <Parameter Name="Color">Orange</Parameter>
31     </Row>
32     <Row>
33       <Parameter Name="Size">9</Parameter>
34       <Parameter Name="Color">
35         <Value>White</Value>
36         <Value>Black</Value>
37       </Parameter>
38     </Row>
39   </Table>
40 </Data>

위의 예제에서 태그 및 배열 특성을 검사합니다. 먼저 Size 및 Color 매개 변수 모두에 대한 형식을 명시적으로 지정하고 배열 특성을 true로 설정하여 이러한 매개 변수를 배열지정해야 합니다. 그런 다음 값에 <값을 지정합니다...<>/Value> 태그입니다. 지정된 Row의 매개 변수에 대한 배열 내의 값 수를 지정하는 데 필요한 만큼 값 태그를 포함 <> 할 수 있습니다.

위의 XML 예제에서 줄 9, 10, 30 및 33을 확인합니다. 이러한 항목은 단일 값 배열 요소입니다. 즉, 추가 <값> 태그 없이 매개 변수> 태그에 <단일 값 배열 요소를 직접 지정할 수 있습니다.또한 행의 매개 변수에 값이 하나만 있더라도 여전히 한 요소의 배열로 처리되며, 그렇지 않으면 검색할 수 없습니다.

이제 검색 API를 살펴보겠습니다.

네이티브 검색

배열 요소는 WEX::TestExecution::TestDataArray<> 템플릿 클래스를 사용하여 네이티브 코드에서 검색할 수 있습니다. 자세한 내용은 게시된 헤더 TestData.h를 참조하세요. TestDataArray 클래스는 배열 요소의 수명을 관리하고 배열 내에서 특정 값을 검색하는 데 유용한 API를 제공합니다.

1  namespace WEX { namespace TestExecution
2  {
3      template <typename T>
4      class TECOMMON_API TestDataArray sealed
5      {
6         ...
7      public:
8          TestDataArray();
9          ~TestDataArray();
10         const size_t GetSize() const;
11         T& operator[](size_t index);
12
13     private:
14        ...
15     };
16 } /* namespace TestExecution */ } /* namespace WEX */

GetSize를 호출하여 배열의 길이를 가져올 수 있으며 연산자 []를 사용하여 특정 요소를 가져올 수 있습니다.

다음 예제에서는 코드에서 이러한 함수를 사용하는 방법을 보여 줍니다. 네이티브 예제에서 cpp 파일을 고려합니다.

1  TestDataArray<int> sizes;
2  if (SUCCEEDED(TestData::TryGetValue(L"size", sizes)))
3  {
4      size_t count = sizes.GetSize();
5      for (size_t i = 0; i < count; ++i)
6      {
7          Log::Comment(String().Format(L"Size[%d] retrieved was %d", i, sizes[i]));
8      }
9  }
10
11 TestDataArray<String> colors;
12 if (SUCCEEDED(TestData::TryGetValue(L"color", colors)))
13 {
14     size_t count = colors.GetSize();
15     for (size_t i = 0; i < count; ++i)
16     {
17         Log::Comment(String().Format(L"Color[%d] retrieved was ", i) + colors[i]);
18     }
19 }

먼저 배열 형식의 로컬 TestDataArray를 정의합니다. 이 경우 크기는 int 형식의 배열이고 은 WEX::Common::String 형식의 배열입니다. 배열을 검색하는 API는 변수를 검색하는 API와 비슷합니다. TestData::TryGetValue를 호출하고, 매개 변수 크기를 검색하도록 요청하고, 값을 지역 변수 크기에 넣습니다.

배열에 지정되지 않은 매개 변수를 검색하려고 하면 오류가 발생하고 테스트에 실패합니다. 마찬가지로 배열에 요소가 하나만 있어도 배열을 비 배열 변수로 검색하려고 하면 오류가 발생합니다.

배열 매개 변수가 XML 행에 지정되지 않은 경우 매개 변수를 검색하지 못합니다. 예를 들어 행이 다음과 같은 경우입니다.

       <Row>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

배열인 매개 변수 크기는 행에 지정되지 않습니다. 코드에서 Size를 검색하려고 하면 API 호출이 실패한 반환 코드를 반환합니다. 이를 사용하여 기본 배열 값을 정의할 수 있습니다.

반면에 다음과 같이 Size에 빈 매개 변수 태그를 지정하여 빈 배열을 지정할 수 있습니다.

       <Row>
         <Parameter Name="Size"></Parameter>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

이 경우 크기를 검색하려는 시도가 성공하지만 배열 크기는 0입니다.

관리되는 검색

관리되는 검색 재기본 이전과 거의 동일합니다. 값을 적절한 배열 형식의 지역 변수로 검색해야 합니다. 다음 관리되는 예제를 고려합니다.

1  Int32[] sizes = m_testContext.DataRow["Size"] as Int32[];
2  foreach (int size in sizes)
3  {
4          Verify.AreNotEqual(size, 0);
5          Console.WriteLine("Size is " + size.ToString());
6  }
7
8  String[] colors = m_testContext.DataRow["Color"] as String[];
9  foreach (String color in colors)
10 {
11         Console.WriteLine("Color is " + color);
12 }

네이티브 검색과 마찬가지로 배열 매개 변수가 XML 행에 지정되지 않은 경우 매개 변수를 검색하려고 하면 System.DBNull 형식의 개체가 반환됩니다. 예를 들어 행이 다음과 같은 경우입니다.

       <Row>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

배열인 매개 변수 크기는 행에 지정되지 않습니다. 코드에서 Size를 검색하려고 하면 API 호출이 DBNull 형식의 개체를 반환합니다. 테이블에 이러한 값이 있는 경우 먼저 컨텍스트에서 개체로 해당 값을 검색하고 개체 형식 을 typeof(System.DBNull) 또는 제거할 형식과 비교한 후 적절한 단계를 수행할 수 있습니다.

반면에 다음과 같이 Size에 빈 매개 변수 태그를 지정하여 빈 배열을 지정할 수 있습니다.

       <Row>
         <Parameter Name="Size"></Parameter>
         <Parameter Name="Color">
           <Value>White</Value>
           <Value>Black</Value>
         </Parameter>
       </Row>

이 경우 크기를 검색하려고 하면 System.Int32[]형식의 빈 배열이 반환됩니다.

실행

배열을 지원하는 데이터 기반 테스트를 실행하는 것은 다른 데이터 기반 테스트를 실행하는 것과 다르지 않습니다. 유일한 차이점은 배열 데이터 매개 변수의 경우 선택 조건의 주제가 "equals"가 아닌 "contains"를 의미하도록 변경된다는 것입니다.

이것이 의미하는 바를 확인하려면 Color 배열에 White포함된 모든 데이터 기반 테스트를 선택한다고 가정합니다. 이렇게 하려면 다음을 실행합니다.

TE.exe Examples\CSharp.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"
TE.exe Examples\CPP.DataDriven.Example.dll /select:"@Name='*Array* And @Data:Color='White'"

이 명령은 위의 두 경우 모두에서 인덱스 #0 및 #3을 사용하여 데이터 기반 테스트를 실행합니다.

더 복잡한 쿼리를 작성할 수 있습니다. 예를 들어 색 배열에 흰색이 포함되고 배열에 검은색이 포함된 테스트만 선택할 수 있습니다. 그러면 인덱스 #3이 있는 데이터 기반 테스트만 선택할 수 있습니다. 연습으로 이 쿼리를 직접 작성하고 실행해 보세요.