Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu bölüm, örnek olarak veri temelli testin bazı gelişmiş özelliklerini kapsar. Hala temel bilgileri kapsıyorsanız, Basit Veri Temelli Örnekile başlamak isteyebilirsiniz.
Başvurulan örnekler:
ArraySupportDataDrivenExample
CSharpDataDrivenArraySupportExample
Önceki bölümlerde veri temelli test yazma ve yürütme ile ilgili temel bilgiler zaten ele alınmıştır. Aşağıdaki listede, TAEF Veri Odaklı Test Dizilerinin anlamı açıklanır:
- Diziler, tek parametre olarak ele alınan değişken uzunlukta, homojen türde öğelerdir.
- Bir dizi türü belirtmek için ParameterTypes bloğunda parametrenin türünü açıkça belirtmeniz ve array="true" özniteliğini eklemeniz gerekir.
Desteklenen parametre türleri, Tablo Veri Kaynakları'ndakiParametre Türleri'nde listelenir.
Başka bir veri türü belirtilirse, test bir uyarı oluşturur ve bunu bir Dize olarak kabul eder. Diziler söz konusu olduğunda, veri türü String[] türünde olarak kabul edilir.
Aşağıdaki örnekte, parametresinin temel türlerden birinin dizisi olduğunu belirtme işlemi gösterilmektedir. Diziler söz konusu olduğunda varsayılan türlere izin verilmediğini unutmayın; türü açıkça belirtmeniz ve parametre için Array özniteliğini true olarak ayarlamanız gerekir.
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>
Yukarıdaki örnekte Değer etiketlerini ve Dizisi özniteliklerini inceleyin. İlk olarak, Boyutu ve Color parametrelerinin türünü açıkça belirtmeniz ve Dizi özniteliği ni trueolarak ayarlayarak bu parametrelerin diziler olduğunu belirtmeniz gerekir. Ardından <Değer>...</Value> etiketlerindeki değerleri belirtirsiniz. Belirli bir Satırın parametresi için dizi içinde herhangi bir sayıda değer belirtmeniz gerektiği kadar <Değer> etiketine sahip olabilirsiniz.
Yukarıdaki XML örneklerinde 9, 10, 30 ve 33. satırlara dikkat edin. Bu girdiler tek değerli dizi öğeleridir. Başka bir deyişle, <Value> etiketi olmadan tek değerli dizi öğelerini doğrudan <Parametre> etiketinde belirtebilirsiniz. Ayrıca, satırdaki parametre yalnızca bir değere sahip olsa bile , yine de bir öğenin dizisi olarak değerlendirilir ve aksi halde alınamaz.
Şimdi alma API'lerine göz atın.
Yerel Alma
Dizi öğeleri, WEX::TestExecution::TestDataArray<> şablon sınıfı kullanılarak yerel kodda alınabilir. Ayrıntılar için yayımlanan TestData.h üst bilgisine bakın. TestDataArray sınıfı, dizi öğelerinin ömrünü yönetir ve dizi içindeki belirli değerleri almak için yararlı API'ler sağlar:
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 çağırarak dizinin uzunluğunu elde edebilir ve [] işlecini kullanarak belirli bir öğeyi alabilirsiniz.
Sonraki örnekte bu işlevlerin kodda nasıl kullanılacağı gösterilmektedir. Yerel örnekte cpp dosyasını göz önünde bulundurun:
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 }
İlk olarak, dizi türünde yerel bir TestDataArray tanımlarsınız. Bu durumda boyutları, int türünde bir dizidir ve renkler WEX::Common::String türünde bir dizidir. Dizi alma API'si, herhangi bir değişkeni alan api'ye benzer. TestData::TryGetValueçağırırsınız, boyutuparametresini almasını ister ve değeri boyutlarıyerel değişkenine koyarsınız.
Dizi olmayan bir parametreyi bir diziye alma girişiminin bir hataya neden olduğunu ve testi başarısız olduğunu unutmayın. Benzer şekilde, dizide yalnızca bir öğe olsa bile dizi olmayan bir değişkene dizi alma girişimi hataya neden olur.
XML Satırında bir dizi parametresi belirtilmezse, parametreyi alma girişimi başarısız olur. Örneğin, bir Satır şöyle görünüyorsa:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Boyutparametresinin satırda belirtilmemiş olduğuna dikkat edin. Koddan Boyut almaya çalışırsanız, API çağrısı başarısız bir dönüş kodu döndürür. Varsayılan dizi değerini tanımlamak için bunu kullanabilirsiniz.
Öte yandan, Boyut için aşağıdaki gibi boş bir parametre etiketi belirterek boş bir dizi belirtebilirsiniz:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Bu durumda, boyutu alma girişimi başarılı olur, ancak dizi boyutu 0 olur.
yönetilen alma
Yönetilen alma işlemi öncekiyle neredeyse aynı kalır. Yalnızca değerleri uygun dizi türünde bir yerel değişkene almayı unutmayın. Aşağıdaki yönetilen örneği göz önünde bulundurun:
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 }
Yerel alma işlemine benzer şekilde, XML Satırında bir dizi parametresi belirtilmezse, parametreyi alma girişimi System.DBNull türünde bir nesne döndürür. Örneğin, bir Satır şöyle görünüyorsa:
<Row>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Boyutparametresinin satırda belirtilmemiş olduğuna dikkat edin. Koddan Boyut almaya çalışırsanız, API çağrısı DBNull türünde bir nesne döndürür. Tablonuzda böyle değerler varsa, önce bunları bağlamdan bir nesneye almak ve nesne türünü typeof(System.DBNull) veya olmasını istediğiniz türle karşılaştırdıktan sonra uygun adımları atmak isteyebilirsiniz.
Öte yandan, Boyut için boş bir parametre etiketi belirterek aşağıdaki gibi boş bir dizi belirtebilirsiniz:
<Row>
<Parameter Name="Size"></Parameter>
<Parameter Name="Color">
<Value>White</Value>
<Value>Black</Value>
</Parameter>
</Row>
Bu durumda, boyutu alma girişimi, system.Int32[] türünde boş bir dizi döndürür.
Yürütme
Dizileri destekleyen veri temelli testlerin yürütülmesi, diğer veri temelli testlerden farklı değildir. Farkın tek önemli noktası, dizi veri parametreleri söz konusu olduğunda seçim ölçütlerinin sematiklerinin "eşittir" yerine "içerir" anlamına olmasıdır.
Bunun ne anlama geldiğini görmek için, Color dizisinin Beyaz değerini içerdiği tüm veri temelli testleri seçmek istediğinizi varsayalım. Bunu yapmak için şunu çalıştırın:
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'"
Bu komut, yukarıdaki durumların her ikisinde de dizin #0 ve #3 ile veri temelli testleri çalıştırır.
Örneğin, yalnızca renk dizisinin beyaz içerdiği testi ve renk dizisinin yalnızca 3. dizine sahip veri temelli testleri seçen siyahiçerdiği testi seçen daha karmaşık sorgular oluşturabilirsiniz. Alıştırma olarak, bu sorguyu kendiniz yazmayı ve yürütmeyi deneyin.