Aracılığıyla paylaş


Basit Veri Temelli Test Örneği

Bu bölümde veri temelli testlere yönelik çeşitli örnekler açıklanmaktadır ve her örnekteki belirli özellikler ele alınıyor.

İlk örnek, SimpleDataDrivenExample adlı temel bir veri temelli testtir.

Yönetilen örnekte aşağıdakine benzer bir XML dosyası bulacaksınız:

    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>

Bu XML dosyası, veri temelli testimizin tüketecek veri parametrelerini tanımlar. En üstteki XML düğümü <Veri> etiketidir ve bu etiketin içinde tanımlanmış bir veya daha fazla <Tablo> etiketi içerebilir. Her tablonun benzersiz bir "ID" özniteliğiyle ilişkilendirilmesi gerekir. Test işlevleri, XML dosyasında kullanacakları belirli Tabloyu tanımlamak için tablo kimliği değerini kullanır.

Tablo> etiketinde <isteğe bağlı <bir ParameterTypes> bölümünüz vardır. Burada ParameterTypes etiketlerini> kullanarak< belirli bir parametre için veri türünü açıkça belirtebilirsiniz. Yukarıdaki örnekte, "Boyut" parametresinin "Int32" türünde olduğunu ve "Color" parametresinin bir dize olduğunu açıkça belirtirsiniz. Özetlemek gerekirse: ParameterTypes bölümü isteğe bağlıdır. Varsayılan olarak, parametre türü bilgileri sağlanmazsa, dize olarak kaydedilir.

Yönetilen ve Yerel örnekleri karşılaştırırsanız, ikisi arasındaki tek farkın ParameterTypes> bloğu olduğunu< fark edeceksiniz. Yerel XML dosyası, Boyutun "int" yerel tamsayı türünde olacağını belirtir ve belirtmeyerek Color türü olarak varsayılan WEX::Common::String türünü kullanır. Kolaylık sağlamak için aşağıdaki örnekte yerel örnekteki XML dosyası gösterilmektedir.

    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>

Yerel ve Yönetilen kodda desteklenen parametre türleri, Tablo Veri Kaynakları'ndaki Parametre Türleri'nde listelenir.

Başka bir veri türü belirtilirse, test bir uyarı oluşturur ve bunu bir Dize olarak değerlendirir.

XML dosyalarıyla devam edersek, her iki XML dosyasındaki <ParameterTypes> bloğundan sonra, <Satır>ların aynı kümesine sahip olursunuz, bunların her biri hem yönetilen hem de yerel örneklerimizdeki birer veri kümesine karşılık gelir. Bu özel durumda, her biri Parametre> etiketlerini kullanarak< parametrelerin değerlerini belirten 4 Satır> bloğuyla tanımlanan 4 <Veri kümeniz vardır.

Bu, veri kaynağı dosyasının çeşitli bölümlerinin temellerini kapsar. Şimdi yukarıdaki XML dosyasında belirttiğiniz değerleri nasıl alabildiğinizi görelim.

Veri odaklı bir test oluşturmak için yazma testi

Veriler belirtildiğine göre, xml dosyasındaki verileri bu verilerle kullanacak kodu veya test yöntemini ilişkilendirmek için bir yönteme ihtiyacınız vardır. Bunu , hem yönetilen hem de yerel örneklerde "DataSource" meta verilerini belirterek yaparsınız. DataSource meta verilerinin üç bölümü vardır:

  1. 'Tablo:' - Bu, veri kaynağını bir XML tablosu olarak tanımlar.
  2. 'DataDrivenTests.xml' - Bu, XML tablosunu içeren dosyadır.
  3. '#Table2' - '#' sınırlayıcısını takip eden 'Table2' değeri, kullanılacak XML belgesi içindeki belirli tabloyu tanımlar. Tek bir XML Tablosu veri kaynağı birden çok tablo içerebilir. TAEF, belirtilen değerle eşleşen 'Id' özniteliğine sahip bir Tablo öğesinin XML dosyasına bakar.

Yukarıdaki özellikleri kapsayan koda bir kez daha göz atalım.

Yerel kod

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     ...

Yönetilen kod

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

"DataSource", Microsoft.VisualStudio.TestTools.UnitTesting'de bilinen bir özelliktir.

Yukarıdakilere ek olarak, yönetilen koddaki veri temelli testler için bazı ek adımlara ihtiyacınız vardır. Ayrıca özel bir TestContext özelliği tanımlamanız gerekir. Daha fazla bilgi için bkz . TestContext Sınıfı. Ayrıca bu özellik için halka açık değerlendiriciler de tanımlıyorsunuz. TAEF bu TestContext özelliğini dahili olarak ayarlar, böylece verilere bu özellik aracılığıyla erişebilirsiniz. Kodun bu bölümüne hızlıca göz atalım:

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

Test yönteminde veri alma

Erişim API'leri yönetilen ve doğal kodda farklıdır. Yerel alma API'sini anlamakla başlayalım:

    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 ve 17. satırlara özellikle dikkat edin. Bu satırların her biri öncesinde, alacağınız verileri kaydetmek için yerel bir değişken tanımlayın. Türü doğru belirlemek burada önemlidir. "Boyut" öğesini XML dosyasında "int" türü olarak tanımladığınızdan, bunu almak için int türünde bir yerel değişken tanımlamanız gerekir. Alma API'si, ilk parametresi olarak Dize değeri olarak alınacak parametrenin adını alır. İkinci parametre, referansla geçirilen ve TAEF kodu tarafından ayarlanan yerel değişkendir.

Bu alma API'si TestData.h içinde tanımlanır ve tüm TAEF testlerinin içerdiği WexTestClass.h üst bilgisi tarafından dahil edilir.

Yönetilen koddaki verileri almak için tanımladığınız TestContext özelliğini kullanın. Aşağıdaki koda (veya örnekte) göz atın:

    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 hakkında bilginiz varsa yukarıdaki örneğin benzer olduğunu göreceksiniz. DataRow kullanın ve almaya çalıştığınız parametrenin adı olarak sütun adını belirtin.

Örneğe bakarsanız, aynı sınıfta veri temelli olmayan bir test de vardır. Başka bir deyişle, aynı test sınıfında DataDriven ve NonDataDriven testlerini birleştirme esnekliğine sahipsiniz.

SIMPLEDataDrivenExample'ı TAEF ile çalıştırma

TaEF ile DataDrivenTests yürütme ipuçları ve püf noktalarıyla başlamadan önce Veri Temelli Testler Yazma ve TAEF ile Testleri Yürütme hakkında bilgi sahibi olduğunuzdan emin olun. Seçimin TAEF ile nasıl çalıştığına ilişkin belleğinizi yenilemek yararlı olabilir.

Veri temelli testleri yürütmek için komut istemi, TAEF ile herhangi bir genel testi yürütmekten çok farklı değildir. Yukarıda açıklanan her iki örneği de (yerel ve yönetilen) çalıştırmak için aşağıdaki komutu çalıştırmanız yeterlidir:

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

'/name' adı temelinde bir seçim ölçütü ekler ve yalnızca ilgilendiğiniz sınıfları seçer. Sınıfların içinden yürütülecek testleri seçmek için, önce dll'nin tüm özelliklerini listelemeniz gerekir. Ardından, seçim ölçütleri için hangi özelliklerin kullanılacağına karar vekleyebilirsiniz.

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

Şimdilik, yukarıda listelenen SetsOfMetadataTest, SetsOfDataTest'i göz ardı edelim. Bunları merak ediyorsanız Hafif veri temelli test hakkında daha fazla bilgi edinin. Artık çeşitli özellikleri ve Veri parametresi adını ve değerlerini bildiğinize göre, buna bağlı olarak belirli testleri seçebilirsiniz. Bunları deneyin ve seçiminizi onaylamak için takip edin.

Yalnızca veri temelli olmayan testleri çalıştırmak için şunu çalıştırın:

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

Şimdi yalnızca rengin "Siyah" olarak belirtildiği veri temelli testleri çalıştırmak için şunu çalıştırın:

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

"Color" ile yaptığınız gibi , @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> belirtilen DataDriven parametre değerine göre belirli verileri çalıştırır. Yukarıdaki örnekte, WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1 ve WEX::Examples::CSharpDataDrivenSimpleExample::DataDrivenTest#1 çalıştırılır.

Yukarıdaki listproperties içindeki test dizinlerine dikkat edin. Yukarıdakileri dizine göre de seçebilirsiniz.

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

Yukarıdaki, @Data:Color='Black' tarafından seçilen iki testi çalıştırır. @Data:Index > lowerGuardValue ve @Data:index< upperGuardValue ile dizin seçimine korumalar bile eklersiniz

TAEF ile veri temelli testin temellerini anlıyorsanız, aynı örneklerde bir sonraki sınıfla birlikte izleyin: Satır düzeyinde meta verileri geçersiz kılma, Dizi parametre türlerini belirtme.