Bagikan melalui


Contoh Pengujian Berbasis Data Sederhana

Bagian ini menjelaskan beberapa contoh pengujian berbasis data dan mencakup fitur tertentu dalam setiap contoh.

Contoh pertama, adalah pengujian berbasis data dasar, yang disebut SimpleDataDrivenExample.

Dalam contoh terkelola, Anda akan menemukan file XML yang terlihat seperti ini:

    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>

File XML ini mendefinisikan parameter data untuk dikonsumsi oleh pengujian berbasis data kami. Simpul XML teratas adalah <Tag data> , yang mungkin berisi satu atau beberapa <tag Tabel> yang ditentukan di dalamnya. Setiap tabel perlu dikaitkan dengan atribut "ID" unik. Fungsi pengujian menggunakan nilai ID tabel untuk mengidentifikasi Tabel tertentu yang akan mereka gunakan dalam file XML.

<Dalam tag >Table<, Anda memiliki bagian opsional ParameterTypes>. Di sini Anda dapat secara eksplisit menentukan jenis data untuk parameter tertentu menggunakan <tag ParameterTypes> . Dalam contoh di atas, Anda secara eksplisit menentukan bahwa parameter "Ukuran" adalah jenis "Int32" dan Parameter "Warna" adalah string. Untuk meringkas: Bagian ParameterTypes bersifat opsional. Secara default, jika informasi jenis parameter tidak disediakan, informasi tersebut akan disimpan sebagai string.

Jika Anda membandingkan contoh Terkelola dan Asli, Anda akan melihat bahwa satu-satunya perbedaan antara keduanya adalah <blok ParameterTypes> . File XML asli menentukan Ukuran dari jenis bilangan bulat asli "int" dan menggunakan jenis default WEX::Common::String untuk tipe Color dengan tidak menentukannya secara eksplisit. Untuk kenyamanan Anda, contoh berikut menunjukkan file XML dari contoh asli.

    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>

Jenis parameter yang didukung dalam kode Asli dan Terkelola , tercantum dalam Jenis Parameter di Sumber Data Tabel.

Jika ada jenis data lain yang ditentukan, pengujian akan melemparkan peringatan dan menganggapnya sebagai String.

Melanjutkan dengan file XML, setelah blok <ParameterTypes> di kedua file XML, Anda memiliki kumpulan <baris> yang identik, yang masing-masing sesuai dengan satu set data dalam contoh yang kami kelola dan contoh asli kami. Dalam kasus khusus ini, Anda memiliki 4 set data yang ditentukan dengan cara 4 <blok Baris>, masing-masing menentukan nilai parameter menggunakan <tag Parameter>.

Itu mencakup dasar-dasar penting dari berbagai bagian file sumber data. Sekarang mari kita lihat bagaimana Anda dapat mengambil nilai yang Anda tentukan dalam file XML di atas.

Membuat tes penulisan menjadi tes berbasis data

Sekarang setelah data ditentukan, Anda memerlukan cara untuk mengaitkan kode atau metode pengujian yang akan menggunakan data dengan data ini dalam file XML. Anda melakukan ini - dalam contoh terkelola dan asli - dengan menentukan metadata "DataSource" . Metadata DataSource memiliki tiga bagian untuk itu:

  1. 'Table:' - ini mengidentifikasi sumber data sebagai tabel XML.
  2. 'DataDrivenTests.xml' - ini adalah file yang berisi tabel XML.
  3. '#Table2' - Mengikuti pemisah '#', nilai 'Table2' mengidentifikasi tabel tertentu dalam dokumen XML yang akan digunakan. Satu sumber data Tabel XML dapat berisi beberapa tabel. TAEF akan melihat melalui file XML untuk elemen Tabel dengan atribut 'Id' yang cocok dengan nilai yang ditentukan.

Sekali lagi, mari kita lihat sekilas kode yang mencakup aspek-aspek di atas.

Kode asli

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

Kode terkelola

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

"DataSource" adalah properti yang diketahui di Microsoft.VisualStudio.TestTools.UnitTesting.

Selain hal di atas, Anda memerlukan beberapa langkah tambahan untuk pengujian berbasis data dalam kode terkelola. Anda juga perlu menentukan properti TestContext privat. Untuk informasi selengkapnya, lihat Kelas TestContext. Anda juga menentukan penilai publik untuk properti ini. SECARA internal TAEF mengatur properti TestContext ini sehingga Anda dapat mengakses data melaluinya. Mari kita lihat sekilas bagian kode ini:

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

Mengambil data dalam metode Uji

API pengambilan berbeda antara kode terkelola dan kode asli. Mari kita mulai dengan memahami API pengambilan asli:

    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 }

Beri perhatian khusus pada baris 4, 11, dan 17. Sebelum setiap baris ini, tentukan variabel lokal untuk menyimpan data yang akan Anda ambil. Penting untuk memastikan jenisnya benar di sini. Karena Anda menentukan "Ukuran" menjadi jenis "int" dalam file XML, Anda harus menentukan variabel lokal jenis int untuk mengambilnya. API pengambilan mengambil nama parameter untuk diambil sebagai nilai String sebagai parameter pertamanya. Parameter kedua adalah variabel lokal yang dilewatkan secara referensi dan diatur oleh kode TAEF.

API pengambilan ini didefinisikan dalam TestData.h dan dimasukkan oleh header WexTestClass.h yang dicakup oleh semua pengujian TAEF.

Untuk mengambil data dalam kode terkelola, gunakan properti TestContext yang Anda tentukan. Lihat kode di bawah ini (atau dalam contoh):

    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 }

Jika Anda terbiasa dengan VSTS, Anda akan menemukan bahwa contoh di atas serupa. Gunakan DataRow dan tentukan nama kolom sebagai nama parameter yang anda coba ambil.

Jika Anda melihat dalam contoh, ada juga pengujian berbasis non data di kelas yang sama. Dengan kata lain, Anda memiliki fleksibilitas menggabungkan pengujian DataDriven dan NonDataDriven di kelas pengujian yang sama.

Menjalankan SimpleDataDrivenExample dengan TAEF

Pastikan Anda mengetahui cara Menulis Pengujian Berbasis Data dan cara Menjalankan Pengujian dengan TAEF sebelum Anda mulai dengan tips dan trik menjalankan DataDrivenTests dengan TAEF. Mungkin berguna untuk menyegarkan ingatan Anda tentang cara kerja Selection dengan TAEF.

Prompt perintah untuk menjalankan pengujian berbasis data tidak terlalu berbeda dari menjalankan pengujian generik apa pun dengan TAEF. Untuk menjalankan kedua contoh (asli dan terkelola) yang dijelaskan di atas, cukup jalankan perintah berikut:

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

'/name' menambahkan kriteria pilihan berdasarkan nama dan hanya memilih kelas yang Anda minati. Untuk memilih pengujian mana yang akan dijalankan dari dalam kelas, Anda harus terlebih dahulu mencantumkan semua properti dll. Kemudian, Anda dapat memutuskan properti mana yang akan digunakan untuk kriteria pemilihan.

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

Untuk saat ini, mari kita abaikan SetsOfMetadataTest dan SetsOfDataTest yang tercantum di atas. Jika Anda ingin tahu tentang hal ini, baca selengkapnya tentang Pengujian berbasis data ringan. Sekarang setelah Anda mengetahui berbagai properti dan Nama dan nilai parameter data, Anda dapat memilih pengujian tertentu berdasarkan itu. Cobalah dan ikuti prosesnya untuk memastikan pilihan Anda.

Untuk menjalankan hanya pengujian non-berbasis data, jalankan:

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

Sekarang, untuk menjalankan hanya pengujian berbasis data tersebut, di mana warna ditentukan sebagai "Hitam", jalankan:

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

Sama seperti yang Anda lakukan dengan "Color", @Data:<DataDrivenParameterName>=<DataDrivenParameterValue> akan menjalankan data tertentu berdasarkan nilai parameter DataDriven yang ditentukan. Dalam kasus di atas, ia akan menjalankan WEX::TestExecution::Examples::SimpleDataDrivenExample::DataDrivenTest#1 dan WEX.Examples.CSharpDataDrivenSimpleExample.DataDrivenTest#1

Perhatikan indeks pengujian dalam listproperties di atas. Anda juga dapat memilih hal di atas berdasarkan indeks.

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

Di atas akan menjalankan dua pengujian yang sama yang @Data:Color='Hitam' dipilih. Anda bahkan menambahkan penjaga ke pemilihan indeks dengan @Data:Indeks > lowerGuardValue dan @Data:index< upperGuardValue

Jika Anda memahami dasar-dasar pengujian berbasis data dengan TAEF, ikuti bersama dengan kelas berikutnya dalam contoh yang sama: Mengambil alih metadata di tingkat Baris, Menentukan jenis parameter array.