Bagikan melalui


Beberapa Sumber Data

Beberapa DataSource berguna saat Anda mencari ekspansi gabungan dari satu atau beberapa Sumber Data (Sumber Data berbasis Tabel, Sumber Data berbasis PICT, atau Sumber Data berbasis WMI).

Membuat desain pengujian Anda untuk memanfaatkan fitur ini secara efisien adalah yang terpenting. Mari kita lihat dengan bantuan contoh mengapa demikian. Katakanlah sebagai bagian dari beberapa DataSource, Anda ingin menentukan dua Sumber Data berbasis Tabel, satu Sumber Data berbasis WMI dan satu Sumber Data Berbasis PICT. Demi argumen, katakanlah tabel pertama memiliki 4 baris, yang kedua memiliki 5 baris, kueri WMI mengembalikan 2 hasil dan PICT DataSource menghasilkan 6 kombinasi pairwise. TAEF akan muncul dengan perluasan kompbinatorial dari serangkaian parameter ini. Ini berarti metode pengujian yang dimaksud akan dipanggil (4 X 5 X 2 X 6 =) 240 kali! Meningkatkan jumlah pemanggilan metode pengujian dengan berbagai kombinasi parameter dapat menghasilkan hasil yang berkurang sejauh cakupan pengujian berjalan. Ini membuatnya penting untuk merancang pengujian menggunakan beberapa DataSources dengan hati-hati dan dengan menimbang alternatif lain. Berikut ini adalah beberapa poin yang mungkin ingin Anda pertimbangkan:

  • Pastikan menambahkan nilai untuk memiliki beberapa tabel. Jika Anda tidak memerlukannya untuk dipisahkan, Anda bisa membuat kombinasi parameter yang efisien sendiri.
  • Periksa apakah Anda dapat menggunakan file model PICT dengan batasan, bukan beberapa tabel.
  • Periksa apakah ada nilai dalam merefaktor kasus pengujian Anda ke dalam beberapa pengujian dan mengaitkan subset dari beberapa DataSources dengan setiap sub-pengujian yang baru dibuat.

Tentukan beberapa DataSources

Aspek utama di sini adalah cara menentukan DataSource. Mari kita lihat cuplikan kode dari contoh asli dan terkelola kita.

Asli

1   namespace WEX { namespace TestExecution { namespace Examples
2   {
3       class AdvancedDataDrivenTests
4       {
5           TEST_METHOD_SETUP(DataDrivenSetup);
6           TEST_METHOD_CLEANUP(DataDrivenCleanup);
7
8           TEST_CLASS(AdvancedDataDrivenTests)
9
10          BEGIN_TEST_METHOD(SecondTable)
11              TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table2;Table:CppTestLevelDataSource.xml#NestedTable")
12          END_TEST_METHOD()
13
14          BEGIN_TEST_METHOD(FirstTable)
15              TEST_METHOD_PROPERTY(L"DataSource", L"Table:AdvancedDataDrivenTests.xml#Table1;"
16                  L"PICT:PictDataSource.txt;" L"WMI:SELECT Location FROM Win32_StartupCommand")
17          END_TEST_METHOD()
18      };
19  } /* namespace Examples */ } /* namespace TestExecution */ } /* namespace WEX */

Lihat baris 11, 15, dan 16 dalam contoh di atas. Secara umum, pola yang harus diikuti untuk menentukan DataSource adalah daftar yang dipisahkan titik koma dari setiap spesifikasi DataSource. Spesifikasinya juga akan terlihat sangat mirip dalam kode terkelola.

Dikelola

[TestMethod]
[DataSource(@"Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;
    WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]

public void First()
{
    Log.Comment("In CSharpAdvancedDataDrivenTests.First");
    String[] shapes = m_testContext.DataRow["Shape"] as String[];
    foreach (String shape in shapes)
    {
        Console.WriteLine("The shape is " + shape);
    }

    Int32[] lengths = m_testContext.DataRow["Length"] as Int32[];
    foreach (int length in lengths)
    {
        Console.WriteLine("The length is " + length.ToString());
    }

    String description = (String)m_testContext.DataRow["Description"];
    Boolean desktopInteract = (Boolean)m_testContext.DataRow["DesktopInteract"];
    UInt32 processId = (UInt32)m_testContext.DataRow["ProcessId"];
    Log.Comment("Themes service is running on process " + processId.ToString());
    Log.Comment("Themes service description: " + description);
}

Contohnya juga menunjukkan cara untuk menentukan beberapa DataSources di beberapa baris. Tentu saja, Anda dapat menentukan DataSource pada satu baris (seperti yang ditunjukkan di bawah), tetapi Anda dapat meningkatkan keterbacaan secara signifikan dengan menggunakan konstruksi yang ditunjukkan di atas.

Menentukan DataSource pada satu baris

[DataSource("Table:CSharpAdvancedDataDrivenTests.xml#FirstTable;WMI:SELECT ProcessId FROM Win32_Service WHERE Name='Themes'")]

Hanya untuk melakukan iterasi ulang: metode pengujian akan dijalankan sekali untuk setiap perluasan gabungan n-way dari himpunan data yang dihasilkan oleh setiap DataSource individu. Misalnya, untuk contoh terkelola di atas, dengan aman dengan asumsi bahwa hanya ada satu layanan Tema yang berjalan, dan mengetahui bahwa ada 3 Baris dalam sumber data tabel yang disediakan, metode pengujian akan dipanggil 3 kali (1 X 3). Dalam contoh kasus asli, dalam metode pengujian SecondTable, ada dua tabel DataSources yang ditentukan. Tabel pertama berisi 3 Baris dan tabel kedua berisi 4 baris. Oleh karena itu, metode pengujian akan dipanggil 12 kali (3 X 4).

Batasan yang berlaku saat menentukan Beberapa Sumber Data

Batasan hanya berlaku saat Anda ingin menentukan Sumber Data berbasis Tabel dalam beberapa spesifikasi DataSource. Table DataSource harus ditentukan sebagai Table:<relative path to XML file>#<TableId>. Jika TAEF menemukan bahwa "TableId" disediakan sebagai metadata terpisah, taEF akan mengasumsikan bahwa DataSource adalah Sumber Data berbasis Tabel tunggal dan melanjutkan.