Bagikan melalui


Memverifikasi Kerangka Kerja

Untuk mempermudah penulisan Pengujian, TAEF menyediakan kerangka kerja "Verifikasi" yang memanfaatkan WexLogger untuk melaporkan log terperinci dengan jumlah kode minimal. Kerangka kerja Verifikasi membantu Pengujian untuk menyediakan output log terstruktur - menghasilkan log yang berhasil jika verifikasi tertentu berhasil, dan menghasilkan informasi terperinci jika verifikasi gagal.

Menggunakan Verifikasi Dari C++

API Verifikasi muncul di C++ sebagai sekumpulan makro yang ditentukan dalam file header "Verify.h" (Catatan: Anda tidak perlu secara eksplisit menyertakan Verify.h, Anda harus menyertakan "WexTestClass.h" yang berisi semua yang Anda butuhkan untuk menandai pengujian C++ dan berinteraksi dengan Verifikasi dan WexLogger API).

Berikut ini Verifikasi Makro tersedia untuk Tes C++ Asli:

Makro Fungsionalitas
VERIFY_ARE_EQUAL(diharapkan, aktual, [pesan opsional]) Memverifikasi bahwa dua objek yang ditentukan sama. Juga mencatat pesan kustom jika disediakan.
VERIFY_ARE_NOT_EQUAL(diharapkan, aktual, [pesan opsional]) Memverifikasi bahwa dua objek yang ditentukan tidak sama. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_GREATER_THAN(expectedGreater, expectedLess, [pesan opsional]) Memverifikasi bahwa parameter pertama lebih besar dari parameter kedua. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_GREATER_THAN_OR_EQUAL(expectedGreater, expectedLess, [pesan opsional]) Memverifikasi bahwa parameter pertama lebih besar dari atau sama dengan parameter kedua. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_LESS_THAN(expectedLess, expectedGreater, [pesan opsional]) Memverifikasi bahwa parameter pertama kurang dari parameter kedua. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_LESS_THAN_OR_EQUAL(expectedLess, expectedGreater, [optional message]) Memverifikasi bahwa parameter pertama kurang dari atau sama dengan parameter kedua. Juga mencatat pesan kustom jika disediakan.
VERIFY_ARE_SAME(diharapkan, aktual, [pesan opsional]) Memverifikasi bahwa dua parameter yang ditentukan merujuk ke objek yang sama. Juga mencatat pesan kustom jika disediakan.
VERIFY_ARE_NOT_SAME(diharapkan, aktual, [pesan opsional]) Memverifikasi bahwa dua parameter yang ditentukan tidak merujuk ke objek yang sama. Juga mencatat pesan kustom jika disediakan.
VERIFY_FAIL ([pesan opsional]) Gagal tanpa memeriksa kondisi apa pun. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_TRUE(kondisi, [pesan opsional]) Memverifikasi bahwa bool yang ditentukan benar. Panggil VERIFY_IS_TRUE(!! __condition), atau VERIFY_WIN32_BOOL_SUCCEEDED(__condition) untuk menguji Win32 BOOL. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_FALSE(kondisi, [pesan opsional]) Memverifikasi bahwa bool yang ditentukan adalah false. Panggil VERIFY_IS_FALSE(!! __condition), atau VERIFY_WIN32_BOOL_FAILED(__condition) untuk menguji Win32 BOOL. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_NULL(objek, [pesan opsional]) Memverifikasi bahwa parameter yang ditentukan adalah NULL. Juga mencatat pesan kustom jika disediakan.
VERIFY_IS_NOT_NULL(objek, [pesan opsional]) Memverifikasi bahwa parameter yang ditentukan bukan NULL. Juga mencatat pesan kustom jika disediakan.
VERIFY_SUCCEEDED(hresult, [pesan opsional]) Memverifikasi bahwa HRESULT yang ditentukan berhasil. Juga mencatat pesan kustom jika disediakan.
VERIFY_SUCCEEDED_RETURN(hresult, [pesan opsional]) Memverifikasi bahwa HRESULT yang ditentukan berhasil dan mengembalikan HRESULT yang diteruskan ke makro. Juga mencatat pesan kustom jika disediakan.
VERIFY_FAILED(hresult, [pesan opsional]) Memverifikasi bahwa HRESULT yang ditentukan tidak berhasil. Juga mencatat pesan kustom jika disediakan.
VERIFY_FAILED_RETURN(hresult, [pesan opsional]) Memverifikasi bahwa HRESULT yang ditentukan tidak berhasil dan mengembalikan HRESULT yang diteruskan ke makro. Juga mencatat pesan kustom jika disediakan.
VERIFY_THROWS(operasi, pengecualian, [pesan opsional]) Memverifikasi bahwa operasi yang ditentukan melemparkan jenis pengecualian yang diberikan. Juga mencatat pesan kustom jika disediakan.
VERIFY_NO_THROW(operasi, [pesan opsional]) Memverifikasi bahwa operasi yang ditentukan tidak melemparkan pengecualian. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_SUCCEEDED(win32Result, [pesan opsional]) Memverifikasi bahwa hasil Win32 yang ditentukan berhasil. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_SUCCEEDED_RETURN(win32Result, [pesan opsional]) Memverifikasi bahwa hasil Win32 yang ditentukan berhasil dan mengembalikan LONG yang diteruskan ke makro. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_FAILED(win32Result, [pesan opsional]) Memverifikasi bahwa hasil Win32 yang ditentukan gagal. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_FAILED_RETURN(win32Result, [pesan opsional]) Memverifikasi bahwa hasil Win32 yang ditentukan gagal dan mengembalikan LONG yang diteruskan ke makro. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_BOOL_SUCCEEDED(win32Bool, [pesan opsional]) Memverifikasi bahwa Win32 BOOL yang ditentukan berhasil (!= FALSE). Akan mencatat hasil GetLastError() jika verifikasi gagal. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN(win32Bool, [pesan opsional]) Memverifikasi bahwa Win32 BOOL yang ditentukan berhasil (!= FALSE) dan mengembalikan BOOL yang diteruskan ke makro. Akan mencatat hasil GetLastError() jika verifikasi gagal. Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_BOOL_FAILED(win32Bool, [pesan opsional]) Memverifikasi bahwa Win32 BOOL yang ditentukan gagal (== FALSE). Tidak mencatat hasil GetLastError(). Juga mencatat pesan kustom jika disediakan.
VERIFY_WIN32_BOOL_FAILED_RETURN(win32Bool, [pesan opsional]) Memverifikasi bahwa Win32 BOOL yang ditentukan gagal (== FALSE) dan mengembalikan BOOL yang diteruskan ke makro. Tidak mencatat hasil GetLastError(). Juga mencatat pesan kustom jika disediakan.

Penggunaan Verifikasi Berbasis Pengecualian

Jika kode sumber Anda dikompilasi dengan pengecualian C++ diaktifkan (dengan menentukan sakelar baris perintah "/EHsc", atau makro "USE_NATIVE_EH=1" dalam file sumber), maka makro Verifikasi akan default untuk mencatat kesalahan pada kegagalan, diikuti dengan melempar pengecualian C++ asli. Pengecualian yang dilemparkan adalah WEX::TestExecution::VerifyFailureException. Anda tidak perlu menangkap pengecualian ini - kerangka kerja TAEF akan menangkapnya untuk Anda dan melanjutkan ke kasus pengujian berikutnya.

Secara opsional, jika Anda ingin melakukan serangkaian verifikasi secara berturut-turut daripada membatalkan pengujian pada kegagalan verifikasi pertama, Anda dapat menggunakan kelas DisableVerifyExceptions . Masa pakai objek mengontrol jumlah waktu pengecualian dinonaktifkan.

if (NULL != m_key)
{
    DisableVerifyExceptions disable;
    VERIFY_WIN32_SUCCEEDED(::RegDeleteKey(HKEY_CURRENT_USER, zTempName));
    VERIFY_WIN32_SUCCEEDED(::RegCloseKey(m_key));
}

Dalam contoh di atas, pengecualian hanya dinonaktifkan dalam blok "if (NULL != m_key)", dan jika panggilan verifikasi pertama gagal, panggilan verifikasi kedua masih dilakukan.

Kelas DisableVerifyExceptions dihitung ulang, dan juga berfungsi berdasarkan per utas.

Penggunaan Verifikasi Berbasis Non-Pengecualian

Jika kode sumber Anda tidak dikompilasi dengan pengecualian C++ diaktifkan, Verifikasi makro tidak akan melempar C++ asli saat verifikasi gagal. Selain itu, jika kode sumber Anda dikompilasi dengan pengecualian C++ diaktifkan tetapi Anda ingin menonaktifkan Verifikasi pengecualian, cukup #define NO_VERIFY_EXCEPTIONS sebelum menyertakan "WexTestClass.h".

Dalam model ini, Anda harus melakukan serangkaian pernyataan berlapis jika untuk mengontrol alur kasus pengujian Anda, daripada mengandalkan pengecualian C++.

if (VERIFY_WIN32_SUCCEEDED(::RegDeleteKey(HKEY_CURRENT_USER, zTempName)))
{
    ...
}

Verifikasi Pengaturan Output

Jika Anda ingin menyesuaikan output yang dihasilkan oleh Verify API, Anda dapat menggunakan kelas SetVerifyOutput . Masa pakai objek mengontrol jumlah waktu pengaturan output diatur. Kelas SetVerifyOutput dihitung ulang, dan berfungsi berdasarkan per utas.

if (NULL != m_key)
{
    SetVerifyOutput verifySettings(VerifyOutputSettings::LogOnlyFailures);
    VERIFY_IS_TRUE(true, L"Should NOT log a comment");
    VERIFY_IS_TRUE(false, L"Should log an error");
}
VERIFY_IS_TRUE(true, L"Should log a comment");

Dalam contoh di atas, pengaturan yang ditentukan hanya berkaitan dengan panggilan yang dilakukan dalam blok "if (NULL != m_key)", dan hanya panggilan verifikasi yang gagal yang akan dicatat. Namun, panggilan verifikasi ketiga akan dicatat meskipun berhasil. Hal ini disebabkan oleh fakta bahwa kelas SetVerifyOutput telah keluar dari cakupan.

Opsi berikut ada untuk mengatur output verifikasi:

VerifyOutputSettings::LogOnlyFailures
Hanya panggilan verifikasi yang gagal yang akan dicatat; semua panggilan yang berhasil diabaikan.

VerifyOutputSettings::LogFailuresAsBlocked
Catat semua kegagalan sebagai diblokir daripada mencatat kesalahan.

VerifyOutputSettings::LogFailuresAsWarnings
Catat semua kegagalan sebagai peringatan daripada mencatat kesalahan.

VerifyOutputSettings::LogValuesOnSuccess
Catat nilai parameter yang diteruskan, bahkan ketika panggilan Verifikasi berhasil.

Verifikasi pengaturan output dapat berupa OR bersama-sama untuk mengaktifkan beberapa pengaturan:

SetVerifyOutput verifySettings(VerifyOutputSettings::LogOnlyFailures | VerifyOutputSettings::LogFailuresAsBlocked);

Menyediakan Output Nilai untuk Jenis Kustom

Kerangka kerja Verifikasi C++ menyediakan kemampuan untuk menghasilkan output terperinci untuk jenis kustom apa pun. Untuk melakukannya, seseorang harus menerapkan spesialisasi templat kelas WEX::TestExecution::VerifyOutputTraits .

Spesialisasi templat kelas WEX::TestExecution::VerifyOutputTraits harus ada di namespace WEX::TestExecution . Hal ini juga diharapkan untuk menyediakan metode statis publik yang disebut ToString, yang mengambil referensi ke kelas Anda, dan mengembalikan WEX::Common::NoThrowString yang berisi representasi string dari nilainya.

    class MyClass
    {
    public:
        MyClass(int value)
            : m_myValue(value)
        {
        }

        int GetValue()
        {
            return m_myValue;
        }

    private:
        int m_myValue;
    }

    namespace WEX { namespace TestExecution
    {
        template <>
        class VerifyOutputTraits<MyClass>
        {
        public:
            static WEX::Common::NoThrowString ToString(const MyClass& myClass)
            {
                return WEX::Common::NoThrowString().Format(L"%d", myClass.GetValue());
            }
        };
    }}

Menyediakan Komparat untuk Jenis Kustom

Kerangka kerja Verifikasi C++ menyediakan kemampuan untuk menentukan komparator untuk jenis kustom yang tidak menerapkan kelebihan beban operator yang sesuai (operator=, operator<, dll). Untuk melakukannya, seseorang harus menerapkan spesialisasi templat kelas WEX::TestExecution::VerifyCompareTraits .

Spesialisasi templat kelas WEX::TestExecution::VerifyCompareTraits harus ada di namespace WEX::TestExecution . Hal ini juga diharapkan untuk menyediakan metode statis publik yang disebut AreEqual, AreSame, IsLessThan, IsGreaterThan, dan IsNull.

    class MyClass
    {
    public:
        MyClass(int value)
            : m_myValue(value)
        {
        }

        int GetValue()
        {
            return m_myValue;
        }

    private:
        int m_myValue;
    }

    namespace WEX { namespace TestExecution
    {
        template <>
        class VerifyCompareTraits<MyClass, MyClass>
        {
        public:
            static bool AreEqual(const MyClass& expected, const MyClass& actual)
            {
                return expected.GetValue() == actual.GetValue();
            }

            static bool AreSame(const MyClass& expected, const MyClass& actual)
            {
                return &expected == &actual;
            }

            static bool IsLessThan(const MyClass& expectedLess, const MyClass& expectedGreater)
            {
                return (expectedLess.GetValue() < expectedGreater.GetValue());
            }

            static bool IsGreaterThan(const MyClass& expectedGreater, const MyClass& expectedLess)
            {
                return (expectedGreater.GetValue() > expectedLess.GetValue());
            }

            static bool IsNull(const MyClass& object)
            {
                return object.GetValue() == 0;
            }
        };
    }}

Menggunakan Verifikasi Dari C #

Penggunaan C# Verifikasi mirip dengan C++. Namun, disediakan melalui WEX. Kelas TestExecution.Verify , yang terletak di dalamTe.Managed.dll.

Metode Verifikasi berikut tersedia untuk pengujian C#:

Makro Fungsionalitas
AreEqual(objek diharapkan, objek aktual) Memverifikasi bahwa dua objek yang ditentukan sama.
AreEqual(objek diharapkan, objek aktual, pesan string) Memverifikasi bahwa dua objek yang ditentukan sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
AreEqual<T>(T diharapkan, T aktual) Memverifikasi bahwa dua objek yang ditentukan sama.
AreEqual<T>(T yang diharapkan, T aktual, pesan string) Memverifikasi bahwa dua objek yang ditentukan sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
AreNotEqual(objek diharapkan, objek aktual) Memverifikasi bahwa dua objek yang ditentukan tidak sama.
AreNotEqual(objek yang diharapkan, objek aktual, pesan string) Memverifikasi bahwa dua objek yang ditentukan tidak sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
AreNotEqual<T>(T diharapkan, T aktual) Memverifikasi bahwa dua objek yang ditentukan tidak sama.
AreNotEqual<T>(T yang diharapkan, T aktual, pesan string) Memverifikasi bahwa dua objek yang ditentukan tidak sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
AreSame(objek diharapkan, objek aktual) Memverifikasi bahwa dua parameter yang ditentukan mengacu pada objek yang sama.
AreSame(objek yang diharapkan, objek aktual, pesan string) Memverifikasi bahwa dua parameter yang ditentukan mengacu pada objek yang sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
AreNotSame(objek diharapkan, objek aktual) Memverifikasi bahwa dua parameter yang ditentukan tidak merujuk ke objek yang sama.
AreNotSame(objek yang diharapkan, objek aktual, pesan string) Memverifikasi bahwa dua parameter yang ditentukan tidak merujuk ke objek yang sama; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess) Memverifikasi bahwa parameter pertama lebih besar dari parameter kedua.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, pesan string) Memverifikasi bahwa parameter pertama lebih besar dari parameter kedua; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess) Memverifikasi bahwa parameter pertama lebih besar dari atau sama dengan parameter kedua.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, pesan string) Memverifikasi bahwa parameter pertama lebih besar dari atau sama dengan parameter kedua; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsLessThan(IComparable expectedLess, IComparable expectedGreater) Memverifikasi bahwa parameter pertama kurang dari parameter kedua.
IsLessThan(IComparable expectedLess, IComparable expectedGreater, pesan string) Memverifikasi bahwa parameter pertama kurang dari parameter kedua; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) Memverifikasi bahwa parameter pertama kurang dari atau sama dengan parameter kedua.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, pesan string) Memverifikasi bahwa parameter pertama kurang dari atau sama dengan parameter kedua; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
Fail(pesan string) Gagal tanpa memeriksa kondisi apa pun.
IsTrue(kondisi bool) Memverifikasi bahwa kondisi yang ditentukan benar.
IsTrue(kondisi bool, pesan string) Memverifikasi bahwa kondisi yang ditentukan benar; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsFalse(kondisi bool) Memverifikasi bahwa kondisi yang ditentukan adalah false.
IsFalse(kondisi bool, pesan string) Memverifikasi bahwa kondisi yang ditentukan salah; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsNull(obj objek) Memverifikasi bahwa parameter yang ditentukan adalah NULL.
IsNull(obj objek, pesan string) Memverifikasi bahwa parameter yang ditentukan adalah NULL; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
IsNotNull(obj objek) Memverifikasi bahwa parameter yang ditentukan bukan NULL.
IsNotNull(obj objek, pesan string) Memverifikasi bahwa parameter yang ditentukan bukan NULL; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.
<Melempar T>(operasi VerifyOperation) Memverifikasi bahwa operasi yang ditentukan melemparkan jenis pengecualian yang diberikan. Juga mengembalikan pengecualian untuk pemeriksaan lebih lanjut.
<Melempar T>(operasi VerifyOperation, pesan string) Memverifikasi bahwa operasi yang ditentukan melemparkan jenis pengecualian yang diberikan; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi. Juga mengembalikan pengecualian untuk pemeriksaan lebih lanjut.
NoThrow(Operasi verifyOperation) Memverifikasi bahwa operasi yang ditentukan tidak melemparkan pengecualian.
NoThrow(Operasi verifyOperation, pesan string) Memverifikasi bahwa operasi yang ditentukan tidak memberikan pengecualian; mencatat pesan kustom tentang keberhasilan atau kegagalan verifikasi.

Penggunaan Verifikasi Berbasis Pengecualian

Ketika Kegagalan verifikasi terjadi dalam kasus pengujian C#, kesalahan ditulis ke pencatat, dan WEX. TestExecution.VerifyFailureException dilemparkan. Sama seperti dalam model C++ asli, Anda tidak perlu khawatir tentang menangkap pengecualian ini. Kerangka kerja TAEF akan menangkapnya untuk Anda dan melanjutkan ke kasus pengujian berikutnya.

Secara opsional, jika Anda ingin melakukan serangkaian verifikasi secara berturut-turut daripada membatalkan pengujian pada kegagalan verifikasi pertama, Anda dapat menggunakan kelas DisableVerifyExceptions . Masa pakai objek mengontrol jumlah waktu pengecualian dinonaktifkan. Kelas DisableVerifyExceptions dihitung ulang, dan berfungsi berdasarkan per utas.

using (new DisableVerifyExceptions())
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}

Dalam contoh di atas, jika panggilan verifikasi pertama gagal, panggilan verifikasi kedua masih dilakukan.

Atau, Anda dapat mencapai hasil yang sama dengan mengatur Verify.DisableVerifyExceptions = true sebelum operasi Verifikasi seperti contoh yang ditunjukkan di bawah ini.

Verify.DisableVerifyExceptions = true;
try
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}
finally
{
    Verify.DisableVerifyExceptions = false;
}

Perhatikan bahwa meskipun opsi tersebut tersedia, mendeklarasikan DisableVerifyExeptions sebagai objek dalam blok penggunaan masih merupakan opsi yang direkomendasikan.

Jika Anda ingin berhenti di debugger ketika terjadi kesalahan verifikasi memunculkan dialog pengecualian (Ctrl+Alt+E), klik Tambahkan, pilih "Pengecualian Runtime Bahasa Umum" di menu dropdown dan letakkan "WEX. TestExecution.VerifyFailureException" di bidang Nama.

Verifikasi Pengaturan Output

Jika Anda ingin menyesuaikan output yang dihasilkan oleh Verify API, Anda dapat menggunakan kelas SetVerifyOutput . Masa pakai objek mengontrol jumlah waktu pengaturan output diatur. Kelas SetVerifyOutput dihitung ulang, dan berfungsi berdasarkan per utas.

using (new SetVerifyOutput(VerifyOutputSettings.LogOnlyFailures))
{
    Log.Comment("Only the following error should be logged:");
    Verify.IsTrue(true, "Should NOT log a comment");
    Verify.IsTrue(false, "Should log an error");
}
Verify.IsTrue(true, "Should log a comment");

Dalam contoh di atas, hanya panggilan verifikasi kedua yang harus dicatat karena ini adalah satu-satunya panggilan yang gagal dalam blok penggunaan. Namun, panggilan verifikasi ketiga akan dicatat meskipun berhasil. Hal ini disebabkan oleh fakta bahwa kelas SetVerifyOutput telah keluar dari cakupan.

Atau, Anda dapat mencapai hasil yang sama dengan mengatur Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures sebelum operasi Verifikasi seperti contoh yang ditunjukkan di bawah ini.

Verify.OutputSettings = VerifyOutputSettings.LogFailuresAsWarnings
try
{
    Verify.AreSame(item1, item2);
    Verify.AreEqual(item1, item2);
}
finally
{
    Verify.OutputSettings = VerifyOutputSettings.None;
}

Perhatikan bahwa meskipun opsi tersebut tersedia, mendeklarasikan SetVerifyOutput sebagai objek dalam blok penggunaan masih merupakan opsi yang direkomendasikan.

Opsi berikut ada untuk mengatur output verifikasi:

VerifyOutputSettings.LogOnlyFailures
Hanya panggilan verifikasi yang gagal yang akan dicatat; semua panggilan yang berhasil diabaikan.

VerifyOutputSettings.LogFailuresAsBlocked
Catat semua kegagalan sebagai diblokir daripada mencatat kesalahan.

VerifyOutputSettings.LogFailuresAsWarnings
Catat semua kegagalan sebagai peringatan daripada mencatat kesalahan.

Verifikasi pengaturan output dapat berupa OR bersama-sama untuk mengaktifkan beberapa pengaturan:

using (new SetVerifyOutput(VerifyOutputSettings.LogFailuresAsBlocked | VerifyOutputSettings.LogOnlyFailures))
{
...
}

Menggunakan Verifikasi Dari Skrip

API Verifikasi juga muncul untuk bahasa skrip, mengikuti pola penggunaan yang sama dengan C++ dan C#.

Instalasi

Saat menggunakan API verifikasi yang dapat ditulis dari dalam metode pengujian TAEF, tidak ada penginstalan yang diperlukan - API yang diperlukan didaftarkan menggunakan 'Pendaftaran Gratis COM'. Untuk menggunakan API yang dapat ditulis dari luar metode pengujian TAEF (di luar TAEF, atau dalam proses anak) cukup daftarkan biner Te.Common.dll menggunakan regsvr32 dari prompt perintah yang ditinggikan; misalnya:

regsvr32 Te.Common.dll

Saat menyebarkan TAEF menggunakan file penyebaran untuk eksekusi lab, Te.Common.dll didaftarkan secara otomatis.

Penggunaan

API Verifikasi yang dapat ditulis muncul melalui 'TE. Kelas COM Common.Verify - cukup buat instans kelas dan metode panggilan di dalamnya - kelas Verifikasi akan secara otomatis bekerja dengan WEXLogger untuk menulis lulus dan gagal verifikasi ke log.

1   <?xml version="1.0" ?>
2   <?component error="false" debug="false"?>
3   <package>
4     <component id="Example">
5       <object id="Log" progid="Wex.Logger.Log" />
6       <object id="Verify" progid="Te.Common.Verify" />
7       <reference guid="e65ef678-a232-42a7-8a36-63108d719f31" version="1.0"/>
8       <reference guid="f8bb9db9-e54e-4555-b3e5-e3ddf2fef401" version="1.0"/>
9
10      <public>
11        <method name="HelloWorld"/>
12      </public>
13
14      <script language="JScript">
15          function HelloWorld() {
16              Verify.IsTrue(true);
17              Verify.IsFalse(false);
18          }
19      </script>
20    </component>
21  </package>

Contoh ini mendefinisikan kelas pengujian skrip TAEF dengan satu metode 'HelloWorld'. Baris 6 menggunakan elemen 'objek' untuk menentukan variabel Verifikasi dalam cakupan global. Baris 8 menggunakan elemen 'referensi' untuk menyertakan semua konstanta dari pustaka tipe yang ditentukan (dalam hal ini, pustaka jenis Te.Common.dll) ke dalam lingkup global skrip; dalam hal ini menambahkan konstanta 'VerifySettings'. Baris 16 dan 17 hanya menunjukkan penggunaan Verify API. Ketika dijalankan, contoh akan menghasilkan output berikut:

Test Authoring and Execution Framework v2.7 Build 6.2.7922.0 (fbl_esc_end_dev(mschofie).110202-1000) For x86

StartGroup: Example::HelloWorld
Verify: IsTrue
Verify: IsFalse
EndGroup: Example::HelloWorld [Passed]

Summary: Total=1, Passed=1, Failed=0, Blocked=0, Not Run=0, Skipped=0

API Verifikasi yang Dapat Ditulis

Metode untuk validasi pada API Verifikasi yang dapat ditulis adalah sebagai berikut:

Metode Fungsionalitas
bool Verify.AreEqual(expected, actual, [optional message]) Memverifikasi bahwa kedua nilai tersebut sama. Jika pengaturan 'VerifySettings_CoerceTypes' diaktifkan, metode ini menggunakan definisi JScript dari kesetaraan, jika pengaturan 'VerifySettings_CoerceTypes' tidak diaktifkan, metode menggunakan definisi JScript identitas. 'VerifySettings_CoerceTypes' aktif secara default.
bool Verify.AreNotEqual(expected, actual, [optional message]) Memverifikasi bahwa dua nilai tersebut tidak sama. Jika pengaturan 'VerifySettings_CoerceTypes' diaktifkan, metode ini menggunakan definisi JScript dari kesetaraan, jika pengaturan 'VerifySettings_CoerceTypes' tidak diaktifkan, metode menggunakan definisi JScript identitas. 'VerifySettings_CoerceTypes' aktif secara default.
bool Verify.IsGreaterThan(expectedGreater, expectedLess, [pesan opsional]) Memverifikasi bahwa nilai pertama lebih besar dari yang kedua.
bool Verify.IsGreaterThanOrEqual(expectedGreater, expectedLess, [pesan opsional]) Memverifikasi bahwa nilai pertama lebih besar dari atau sama dengan yang kedua.
bool Verify.IsLessThan(expectedLess, expectedGreater, [opsional message]) Memverifikasi bahwa nilai pertama kurang dari yang kedua.
bool Verify.IsLessThanOrEqual(expectedLess, expectedGreater, [pesan opsional]) Memverifikasi bahwa nilai pertama kurang dari atau sama dengan yang kedua.
bool Verify.AreSame(expected, actual, [optional message]) Memverifikasi bahwa nilainya sama.
bool Verify.AreNotSame(expected, actual, [optional message]) Memverifikasi bahwa nilainya tidak sama.
bool Verify.Fail([pesan opsional]) Gagal tanpa memeriksa kondisi.
bool Verify.IsTrue(expression, [optional message]) Memverifikasi bahwa ekspresi yang diberikan dievaluasi ke true.
bool Verify.IsFalse(expression, [optional message]) Memverifikasi bahwa ekspresi yang diberikan mengevaluasi ke false.
bool Verify.IsNull(expected, [optional message]) Memverifikasi bahwa nilai yang diberikan adalah 'null'.
bool Verify.IsNotNull(expected, [optional message]) Memverifikasi bahwa nilai yang diberikan bukan 'null'.
bool Verify.Throws(function, [optional message]) Memverifikasi bahwa fungsi yang diberikan melempar dan pengecualian.
bool Verify.NoThrow(function, [optional message]) Memverifikasi bahwa fungsi yang diberikan tidak melempar dan pengecualian.

Ada dua metode pada kelas Verifikasi untuk mengontrol pengaturan:

Metode Fungsionalitas
object Verify.EnableSettings(settings) Bendera atau bendera pengaturan yang ditentukan akan diaktifkan.
objek Verify.DisableSettings(settings) Bendera pengaturan atau bendera yang ditentukan akan dinonaktifkan.

Nilai pengaturan yang diteruskan ke metode Verify.EnableSettings atau Verify.DisableSettings dapat berupa salah satu nilai berikut:

VerifySettings_LogOnlyFailures = 0x01
Hanya kegagalan yang dicatat - tidak ada output pada panggilan Verifikasi yang berhasil.

VerifySettings_LogFailuresAsBlocked = 0x02
Kegagalan dicatat sebagai 'Diblokir', alih-alih 'Kesalahan' default.

VerifySettings_LogFailuresAsWarnings = 0x04
Kegagalan dicatat sebagai 'Peringatan', bukan 'Kesalahan' default.

VerifySettings_LogValuesOnSuccess = 0x08
Nilai parameter untuk diverifikasi ditulis sebagai bagian dari pesan log Verifikasi. Ini aktif secara default.

VerifySettings_CoerceTypes = 0x1000
Nilai yang diteruskan ke metode Verifikasi akan dipaksa mengikuti aturan pemaksaan JScript. Ini aktif secara default.

VerifySettings_DisableExceptions = 0x2000
Pengecualian tidak akan dilemparkan ketika validasi gagal.

Verifikasi Pengaturan

API Verifikasi menyediakan pengaturan untuk mengonfigurasi perilakunya. Metode 'EnableSettings' dan 'DisableSettings' dapat digunakan untuk mengaktifkan atau menonaktifkan pengaturan tertentu yang dikelola kelas Verifikasi. Metode ini mengambil satu atau beberapa pengaturan untuk mengaktifkan atau menonaktifkan.

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

Untuk mengaktifkan atau menonaktifkan beberapa pengaturan dalam satu panggilan, Anda dapat menyertakan beberapa bendera 'VerifySettings':

    Verify.EnableSettings(VerifySettings_LogOnlyFailures | VerifySettings_DisableExceptions);

Metode EnableSettings dan DisableSettings mengembalikan objek yang dapat digunakan untuk memulihkan pengaturan asli, memungkinkan pengaturan diaktifkan atau dinonaktifkan untuk cakupan tertentu;

1    var guard = Verify.EnableSettings(VerifySettings_LogOnlyFailures);
2    try
3    {
4        Verify.AreEqual(10, 0xa);
5    }
6    finally
7    {
8        guard.Restore();
9    }

Dalam contoh ini, metode Verify.EnableSettings diteruskan 'VerifySettings_LogOnlyFailures', yang akan dimasukkan dengan pengaturan yang sudah ada pada objek Verifikasi. Panggilan Verifikasi dilakukan dalam blok try-finally, sehingga selama blok terakhir, objek 'penjaga' dapat digunakan untuk memulihkan pengaturan asli.

Penggunaan Verifikasi Berbasis Pengecualian

Secara default, metode Verifikasi akan melemparkan pengecualian saat verifikasi gagal. Saat berjalan di bawah TAEF jika pengecualian dibuang dari metode pengujian, pengujian akan gagal. Contohnya:

1    var guard = Verify.EnableSettings(VerifySettings_CoerceTypes);
2    try
3    {
4        Verify.AreEqual(1, "1");
5        Verify.AreEqual("1", 1);
6    }
7    finally
8    {
9        guard.Restore();
10   }

Dalam contoh ini, panggilan Verifikasi kedua tidak akan pernah dilakukan, karena yang pertama akan melemparkan pengecualian dan gagal dalam pengujian. Dukungan pengaturan pada Verify API dapat digunakan untuk mengubah perilaku ini, sehingga verifikasi yang gagal tidak dilemparkan, yang akan memungkinkan panggilan Verifikasi berikutnya dilakukan. Ini sangat berguna untuk Memverifikasi sekumpulan parameter, dan memastikan bahwa semua verifikasi ditulis.

1    var guard = Verify.EnableSettings(VerifySettings_CoerceTypes | VerifySettings_DisableExceptions);
2    try
3    {
4        Verify.AreEqual(1, "1");
5        Verify.AreEqual("1", 1);
6    }
7    finally
8    {
9        guard.Restore();
10   }

Karena pengecualian dinonaktifkan, kedua verifikasi akan ditulis ke log.

Menggunakan Scriptable Verify API Outside TAEF

API Verifikasi yang dapat ditulis dapat digunakan di luar TAEF. Pastikan bahwa Te.Common.dll terdaftar, seperti yang dipanggil di bagian Penginstalan, dan buat sederhana "TE. Kelas Common.Verify".

var VerifySettings_DisableExceptions = 0x2000;

var Verify = new ActiveXObject("TE.Common.Verify");
var Log = new ActiveXObject("WEX.Logger.Log");

Verify.EnableSettings(VerifySettings_DisableExceptions);

Log.StartGroup("Group A");
Verify.AreEqual(1, 2);
Log.EndGroup("Group A");

Log.StartGroup("Group B");
Verify.AreEqual(2, 2);
Log.EndGroup("Group B");

Kode sebelumnya akan menghasilkan output konsol berikut saat dijalankan melalui cscript:

StartGroup: Group A
Error: Verify: AreEqual - Values (1, 2)
EndGroup: Group A [Failed]

StartGroup: Group B
Verify: AreEqual - Values (2, 2)
EndGroup: Group B [Passed]

Non-passing Tests:

    Group A [Failed]

Summary: Total=2, Passed=1, Failed=1, Blocked=0, Not Run=0, Skipped=0

The 'WEX. API Logger.Log' dapat digunakan untuk mengonfigurasi WEX Logger sesuai kebutuhan (misalnya, sebagai proses anak), dan VERIFY API yang dapat ditulis akan memanfaatkan konfigurasi tersebut.