共用方式為


驗證架構

為了簡化撰寫測試,TAEF 提供「驗證」架構,利用 WexLogger 以最少的程式碼來報告詳細記錄。 驗證架構可協助測試提供結構化記錄輸出 - 如果指定的驗證成功,則會輸出成功的記錄,並在驗證失敗時輸出詳細資訊。

使用來自 C++ 的驗證

Verify API 會以 C++ 呈現為一組宏,這些巨集定義在 「Verify.h」 標頭檔中 (注意:您不需要明確包含 Verify.h,您應該包含 「WexTestClass.h」,其中包含標記 C++ 測試所需的一切,並與 Verify 和 WexLogger API 的) 互動。

下列 Verify 宏適用于原生 C++ 測試:

巨集 功能
VERIFY_ARE_EQUAL (預期、實際、[選擇性訊息]) 確認兩個指定的物件相等。 如果提供,也記錄自訂訊息。
VERIFY_ARE_NOT_EQUAL (預期、實際、[選擇性訊息]) 確認兩個指定的物件不相等。 如果提供,也記錄自訂訊息。
VERIFY_IS_GREATER_THAN (expectedGreater, expectedLess, [選擇性訊息]) 確認第一個參數大於第二個參數。 如果提供,也記錄自訂訊息。
VERIFY_IS_GREATER_THAN_OR_EQUAL (expectedGreater, expectedLess, [選擇性訊息]) 確認第一個參數大於或等於第二個參數。 如果提供,也記錄自訂訊息。
VERIFY_IS_LESS_THAN (expectedLess, expectedGreater, [選擇性訊息]) 確認第一個參數小於第二個參數。 如果提供,也記錄自訂訊息。
VERIFY_IS_LESS_THAN_OR_EQUAL (expectedLess, expectedGreater, [選擇性訊息]) 確認第一個參數小於或等於第二個參數。 如果提供,也記錄自訂訊息。
預期的VERIFY_ARE_SAME (、實際、[選擇性訊息]) 確認指定的兩個參數參考相同的物件。 如果提供,也記錄自訂訊息。
VERIFY_ARE_NOT_SAME (預期、實際、[選擇性訊息]) 確認指定的兩個參數未參考相同的物件。 如果提供,也記錄自訂訊息。
VERIFY_FAIL ([選擇性訊息]) 未檢查任何條件而失敗。 如果提供,也記錄自訂訊息。
VERIFY_IS_TRUE (條件,[選擇性訊息]) 確認指定的 bool 為 true。 呼叫 VERIFY_IS_TRUE (!!__condition) 或 VERIFY_WIN32_BOOL_SUCCEEDED (__condition) 來測試 Win32 BOOL。 如果提供,也記錄自訂訊息。
VERIFY_IS_FALSE (條件,[選擇性訊息]) 確認指定的 bool 為 false。 呼叫VERIFY_IS_FALSE (!!__condition) 或VERIFY_WIN32_BOOL_FAILED (__condition) 來測試 Win32 BOOL。 如果提供,也記錄自訂訊息。
VERIFY_IS_Null (物件,[選擇性訊息]) 確認指定的參數為 Null。 如果提供,也記錄自訂訊息。
VERIFY_IS_NOT_Null (物件,[選擇性訊息]) 確認指定的參數不是 Null。 如果提供,也記錄自訂訊息。
VERIFY_SUCCEEDED (hresult,[選擇性訊息]) 確認指定的 HRESULT 是否成功。 如果提供,也記錄自訂訊息。
VERIFY_SUCCEEDED_RETURN (hresult,[選擇性訊息]) 驗證指定的 HRESULT 是否成功,並傳回傳入宏的 HRESULT。 如果提供,也記錄自訂訊息。
VERIFY_FAILED (hresult,[選擇性訊息]) 確認指定的 HRESULT 不成功。 如果提供,也記錄自訂訊息。
VERIFY_FAILED_RETURN (hresult,[選擇性訊息]) 確認指定的 HRESULT 不成功,並傳回傳入宏的 HRESULT。 如果提供,也記錄自訂訊息。
VERIFY_THROWS (作業、例外狀況、[選擇性訊息]) 確認指定的作業擲回指定的例外狀況類型。 如果提供,也記錄自訂訊息。
VERIFY_NO_THROW (作業,[選擇性訊息]) 確認指定的作業不會擲回例外狀況。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_SUCCEEDED (win32Result, [選擇性訊息]) 確認指定的 Win32 結果成功。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_SUCCEEDED_RETURN (win32Result,[選擇性訊息]) 確認指定的 Win32 結果成功,並傳回傳入宏的 LONG。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_FAILED (win32Result, [選擇性訊息]) 確認指定的 Win32 結果失敗。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_FAILED_RETURN (win32Result,[選擇性訊息]) 確認指定的 Win32 結果失敗,並傳回傳入宏的 LONG。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_BOOL_SUCCEEDED (win32Bool, [選擇性訊息]) 確認指定的 Win32 BOOL 成功 (!= FALSE) 。 如果驗證失敗,將會記錄 GetLastError () 的結果。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN (win32Bool, [選擇性訊息]) 確認指定的 Win32 BOOL 成功 (!= FALSE) ,並傳回傳入宏的 BOOL。 如果驗證失敗,將會記錄 GetLastError () 的結果。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_BOOL_FAILED (win32Bool, [選擇性訊息]) 確認指定的 Win32 BOOL 失敗 (== FALSE) 。 不會記錄 GetLastError () 的結果。 如果提供,也記錄自訂訊息。
VERIFY_WIN32_BOOL_FAILED_RETURN (win32Bool, [選擇性訊息]) 確認指定的 Win32 BOOL 失敗 (== FALSE) ,並傳回傳入宏的 BOOL。 不會記錄 GetLastError () 的結果。 如果提供,也記錄自訂訊息。

以例外狀況為基礎的驗證使用方式

如果您的原始程式碼是以啟用 C++ 例外狀況 (編譯,方法是指定來源檔案中的 「/EHsc」 命令列參數或 「USE_NATIVE_EH=1」 宏) ,則 Verify 宏預設會在失敗時記錄錯誤,然後擲回原生 C++ 例外狀況。 擲回的例外狀況是 WEX::TestExecution::VerifyFailureException。 您不需要攔截此例外狀況 - TAEF 架構會為您攔截它,並繼續進行下一個測試案例。

或者,如果您想要在資料列中執行一系列驗證,而不是在第一次驗證失敗時中止測試,您可以使用 DisableVerifyExceptions 類別。 物件的存留期控制停用例外狀況的時間量。

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

在上述範例中,例外狀況只會在「如果 (Null != m_key) 」區塊內停用,如果第一個驗證呼叫失敗,仍會進行第二次驗證呼叫。

DisableVerifyExceptions類別是 ref-counted,而且也會以每個執行緒為基礎運作。

非例外狀況型驗證使用方式

如果您的原始程式碼 使用啟用 C++ 例外狀況進行編譯,驗證宏將不會在驗證失敗時擲回原生 C++。 此外,如果您的原始程式碼是以已啟用 C++ 例外狀況編譯,但您想要停用驗證例外狀況,只要在包含 「WexTestClass.h」 之前先#define NO_VERIFY_EXCEPTIONS即可。

在此模型中,您必須執行一系列的巢狀 if 語句,以控制測試案例的流程,而不是依賴 C++ 例外狀況。

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

確認輸出設定

如果您想要自訂驗證 API 所產生的輸出,您可以使用 SetVerifyOutput 類別。 物件的存留期會控制已設定輸出設定的時間量。 SetVerifyOutput類別是 ref-counted,且會以每一線程為基礎函式。

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");

在上述範例中,指定的設定只與「如果 (Null != m_key) 」區塊內的呼叫有關,而且 只會 記錄失敗的驗證呼叫。 不過,即使呼叫成功,也會記錄第三個驗證呼叫。 這是因為 SetVerifyOutput 類別已超出範圍。

下列選項可用於設定驗證輸出:

VerifyOutputSettings::LogOnlyFailures
只會記錄失敗的驗證呼叫;會忽略所有成功的呼叫。

VerifyOutputSettings::LogFailuresAsBlocked
將所有失敗記錄為已封鎖,而不是記錄錯誤。

VerifyOutputSettings::LogFailuresAsWarnings
將所有失敗記錄為警告,而不是記錄錯誤。

VerifyOutputSettings::LogValuesOnSuccess
記錄傳入的參數值,即使驗證呼叫成功亦然。

確認輸出設定可以是 OR,以啟用多個設定:

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

提供自訂類型的值輸出

C++ 驗證架構可讓您針對任何自訂類型產生詳細的輸出。 若要這樣做,必須實作 WEX::TestExecution::VerifyOutputTraits 類別範本的特製化。

WEX::TestExecution::VerifyOutputTraits類別範本特製化必須存在於WEX::TestExecution命名空間中。 它也應該提供名為 ToString的公用靜態方法,它會參考您的類別,並傳回 WEX::Common::NoThrowString ,其中包含其值的字串表示。

    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());
            }
        };
    }}

提供自訂類型的比較子

C++ 驗證架構可讓您為未實作對應運算子多載的自訂類型定義比較子, (operator=、operator < 等) 。 若要這樣做,必須實作 WEX::TestExecution::VerifyCompareTraits 類別範本的特製化。

WEX::TestExecution::VerifyCompareTraits類別範本特製化必須存在於WEX::TestExecution命名空間中。 它也應該提供名為AreEqualAreSameIsLessThan、IsGreaterThanIsNull的公用靜態方法。

    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;
            }
        };
    }}

使用 C 的驗證#

C# 驗證使用方式與 C++ 的用法類似。 不過,它會透過 WEX 提供。TestExecution.Verify 類別位於 Te.Managed.dll中。

下列 Verify 方法適用于 C# 測試:

巨集 功能
必須是 AreEqual (物件,實際) 確認兩個指定的物件相等。
AreEqual (預期物件、物件實際、字串訊息) 確認兩個指定的物件相等;記錄驗證成功或失敗的自訂訊息。
AreEqual < T > (T 預期,T 實際) 確認兩個指定的物件相等。
AreEqual < T > (T 預期、T 實際、字串訊息) 確認兩個指定的物件相等;記錄驗證成功或失敗的自訂訊息。
必須是 AreNotEqual (物件,物件實際) 確認兩個指定的物件不相等。
AreNotEqual (預期物件、物件實際、字串訊息) 確認兩個指定的物件不相等;記錄驗證成功或失敗的自訂訊息。
AreNotEqual < T (T > 預期,T 實際) 確認兩個指定的物件不相等。
AreNotEqual < T > (T 預期,T 實際,字串訊息) 確認兩個指定的物件不相等;記錄驗證成功或失敗的自訂訊息。
AreSame (物件預期,物件實際) 確認指定的兩個參數參考相同的物件。
AreSame (預期物件、物件實際、字串訊息) 確認指定的兩個參數參考相同的物件;記錄驗證成功或失敗的自訂訊息。
AreNotSame (物件預期,物件實際) 確認指定的兩個參數未參考相同的物件。
AreNotSame (物件預期、物件實際、字串訊息) 確認指定的兩個參數未參考相同的物件;記錄驗證成功或失敗的自訂訊息。
IsGreaterThan (IComparable expectedGreater、IComparable expectedLess) 確認第一個參數大於第二個參數。
IsGreaterThan (IComparable expectedGreater、IComparable expectedLess、字串訊息) 確認第一個參數大於第二個參數;記錄驗證成功或失敗的自訂訊息。
IsGreaterThanOrEqual (IComparable expectedGreater、IComparable expectedLess) 確認第一個參數大於或等於第二個參數。
IsGreaterThanOrEqual (IComparable expectedGreater、IComparable expectedLess、字串訊息) 確認第一個參數大於或等於第二個參數;記錄驗證成功或失敗的自訂訊息。
IsLessThan (IComparable expectedLess、IComparable expectedGreater) 確認第一個參數小於第二個參數。
IsLessThan (IComparable expectedLess、IComparable expectedGreater、字串訊息) 確認第一個參數小於第二個參數;記錄驗證成功或失敗的自訂訊息。
IsLessThanOrEqual (IComparable expectedLess,IComparable expectedGreater) 確認第一個參數小於或等於第二個參數。
IsLessThanOrEqual (IComparable expectedLess、IComparable expectedGreater、字串訊息) 確認第一個參數小於或等於第二個參數;記錄驗證成功或失敗的自訂訊息。
) 失敗 (字串訊息 失敗,而不需要檢查任何條件。
IsTrue (bool 條件) 確認指定的條件為 true。
IsTrue (bool 條件、字串訊息) 確認指定的條件為 true;記錄驗證成功或失敗的自訂訊息。
IsFalse (bool 條件) 確認指定的條件為 false。
IsFalse (bool 條件、字串訊息) 確認指定的條件為 false;記錄驗證成功或失敗的自訂訊息。
IsNull (物件 obj) 確認指定的參數為 Null。
IsNull (物件 obj,字串訊息) 確認指定的參數為 Null;記錄驗證成功或失敗的自訂訊息。
IsNotNull (物件 obj) 確認指定的參數不是 Null。
IsNotNull (物件 obj,字串訊息) 確認指定的參數不是 Null;記錄驗證成功或失敗的自訂訊息。
擲回 < T > (VerifyOperation 作業) 確認指定的作業擲回指定的例外狀況類型。 也會傳回例外狀況以供進一步檢查。
擲回 < T > (VerifyOperation 作業、字串訊息) 確認指定的作業擲回指定的例外狀況類型;記錄驗證成功或失敗的自訂訊息。 也會傳回例外狀況以供進一步檢查。
NoThrow (VerifyOperation 作業) 確認指定的作業不會擲回例外狀況。
NoThrow (VerifyOperation 作業、字串訊息) 確認指定的作業不會擲回例外狀況;記錄驗證成功或失敗的自訂訊息。

以例外狀況為基礎的驗證使用方式

在 C# 測試案例中發生驗證失敗時,會將錯誤寫入記錄器和 WEX。TestExecution.VerifyFailureException 擲回。 就像在原生 C++ 模型中一樣,您不需要擔心攔截這些例外狀況。 TAEF 架構會為您攔截它,並繼續進行下一個測試案例。

或者,如果您想要在資料列中執行一系列驗證,而不是在第一次驗證失敗時中止測試,您可以使用 DisableVerifyExceptions 類別。 物件的存留期控制停用例外狀況的時間量。 DisableVerifyExceptions類別是 ref-counted,而且會以每一線程為基礎函式。

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

在上述範例中,如果第一個驗證呼叫失敗,仍會進行第二個驗證呼叫。

或者,您也可以在驗證作業之前設定 Verify.DisableVerifyExceptions = true ,以達到相同的結果,例如如下所示的範例。

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

請注意,即使有這類選項可用,將 DisableVerifyExeptions 宣告為 using 區塊中的物件仍然是建議的選項。

如果您想要在發生驗證錯誤時停止偵錯工具中出現例外狀況對話方塊, (Ctrl+Alt+E) ,請按一下 [新增],在下拉式清單中選擇 [Common Language Runtime Exceptions],然後放入 「WEX。[名稱] 欄位中的 TestExecution.VerifyFailureException」。

確認輸出設定

如果您想要自訂驗證 API 所產生的輸出,您可以使用 SetVerifyOutput 類別。 物件的存留期會控制已設定輸出設定的時間量。 SetVerifyOutput類別是 ref-counted,且會以每一線程為基礎函式。

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");

在上述範例中,應該只記錄第二個驗證呼叫,因為它是使用 區塊內失敗的唯一呼叫。 不過,即使呼叫成功,也會記錄第三個驗證呼叫。 這是因為 SetVerifyOutput 類別已超出範圍。

或者,您可以在 Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures 之前設定 Verify.OutputSettings =VerifyOutputSettings ,以達到相同的結果,例如如下所示的範例。

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

請注意,即使有這類選項可用,仍建議使用 區塊中將 SetVerifyOutput 宣告為 物件。

下列選項可用於設定驗證輸出:

VerifyOutputSettings.LogOnlyFailures
只會記錄失敗的驗證呼叫;會忽略所有成功的呼叫。

VerifyOutputSettings.LogFailuresAsBlocked
將所有失敗記錄為已封鎖,而不是記錄錯誤。

VerifyOutputSettings.LogFailuresAsWarnings
將所有失敗記錄為警告,而不是記錄錯誤。

確認輸出設定可以是 OR,以啟用多個設定:

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

使用來自腳本的驗證

驗證 API 也會針對指令碼語言呈現,遵循與 C++ 和 C# 相同的使用模式。

安裝

從 TAEF 測試方法內使用可編寫腳本的驗證 API 時,不需要安裝 - 必要的 API 會使用「註冊免費 COM」來註冊。 若要從 TAEF 測試方法外部使用可編寫腳本的 API, (TAEF 外部,或在子進程) 只要從提升許可權的命令提示字元使用 regsvr32 註冊Te.Common.dll二進位檔;例如:

regsvr32 Te.Common.dll

使用部署檔案部署 TAEF 以進行實驗室執行時,會自動註冊Te.Common.dll。

使用量

可編寫腳本的驗證 API 會透過 'TE 呈現。Common.Verify' COM 類別 - 只要具現化該類別並呼叫方法即可 - Verify 類別會自動與 WEXLogger 搭配運作,以將傳遞和失敗驗證寫入記錄檔。

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>

此範例會使用單一 'HelloWorld' 方法定義 TAEF 腳本測試類別。 第 6 行使用 'object' 元素,在全域範圍中定義 Verify 變數。 第 8 行使用 'reference' 元素,在此案例中將指定之型別程式庫 (的所有常數包含在腳本的全域範圍中,Te.Common.dll的型別程式庫) ;在此情況下,它會新增 'VerifySettings' 常數。 第 16 和 17 行只會顯示驗證 API 的使用方式。 執行時,此範例會產生下列輸出:

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

可編寫腳本驗證 API 上的驗證方法如下所示:

方法 功能
bool Verify.AreEqual (預期,實際,[選擇性訊息]) 確認兩個值相等。 如果已啟用 'VerifySettings_CoerceTypes' 設定,這個方法會使用相等的 JScript 定義,如果未啟用 'VerifySettings_CoerceTypes' 設定,此方法就會使用身分識別的 JScript 定義。 預設會開啟 'VerifySettings_CoerceTypes'。
bool Verify.AreNotEqual (預期、實際、[選擇性訊息]) 確認兩個值不相等。 如果已啟用 'VerifySettings_CoerceTypes' 設定,這個方法會使用相等的 JScript 定義,如果未啟用 'VerifySettings_CoerceTypes' 設定,此方法就會使用身分識別的 JScript 定義。 預設會開啟 'VerifySettings_CoerceTypes'。
bool Verify.IsGreaterThan (expectedGreater, expectedLess, [選擇性訊息]) 確認第一個值大於第二個值。
bool Verify.IsGreaterThanOrEqual (expectedGreater, expectedLess, [選擇性訊息]) 確認第一個值大於或等於第二個值。
bool Verify.IsLessThan (expectedLess, expectedGreater, [選擇性訊息]) 確認第一個值小於第二個值。
bool Verify.IsLessThanOrEqual (expectedLess, expectedGreater, [選擇性訊息]) 確認第一個值小於或等於第二個值。
bool Verify.AreSame (預期,實際,[選擇性訊息]) 驗證值是否相同。
bool Verify.AreNotSame (預期、實際、[選擇性訊息]) 確認值不相同。
bool Verify.Fail ([選擇性訊息]) 在沒有檢查條件的情況下失敗。
bool Verify.IsTrue (運算式,[選擇性訊息]) 確認指定的運算式評估為 true。
bool Verify.IsFalse (運算式,[選擇性訊息]) 確認指定的運算式評估為 false。
bool Verify.IsNull (預期,[選擇性訊息]) 確認指定的值為 'null'。
bool Verify.IsNotNull (預期,[選擇性訊息]) 確認指定的值不是 'null'。
bool Verify.Throws (函式[選擇性訊息]) 確認指定的函式擲回和例外狀況。
bool Verify.NoThrow (函式,[選擇性訊息]) 確認指定的函式不會擲回 和 例外狀況。

Verify 類別上有兩種方法可控制設定:

方法 功能
object Verify.EnableSettings (settings) 將會啟用指定的設定旗標或旗標。
object Verify.DisableSettings (設定) 將會停用指定的設定旗標或旗標。

傳遞至 Verify.EnableSettings 或 Verify.DisableSettings 方法的設定值可以是下列任何值:

VerifySettings_LogOnlyFailures = 0x01
只會記錄失敗 - 成功驗證呼叫時沒有輸出。

VerifySettings_LogFailuresAsBlocked = 0x02
失敗會記錄為「已封鎖」,而不是預設的「錯誤」。

VerifySettings_LogFailuresAsWarnings = 0x04
失敗會記錄為「警告」,而不是預設的「錯誤」。

VerifySettings_LogValuesOnSuccess = 0x08
要驗證的參數值會寫入為驗證記錄訊息的一部分。 預設為開啟狀態。

VerifySettings_CoerceTypes = 0x1000
傳遞至 Verify 方法的值將會在 JScript 強制型轉規則之後強制型轉。 預設為開啟狀態。

VerifySettings_DisableExceptions = 0x2000
驗證失敗時不會擲回例外狀況。

驗證設定

驗證 API 提供設定來設定其行為。 'EnableSettings' 和 'DisableSettings' 方法可用來啟用或停用 Verify 類別所維護的特定設定。 方法會採用一或多個設定來啟用或停用。

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

若要在一個呼叫中啟用或停用多個設定,您可以包含多個 'VerifySettings' 旗標:

    Verify.EnableSettings(VerifySettings_LogOnlyFailures | VerifySettings_DisableExceptions);

EnableSettings 和 DisableSettings 方法會傳回可用來還原原始設定的物件,允許啟用或停用指定範圍的設定;

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

在此範例中,會傳遞 Verify.EnableSettings 方法 'VerifySettings_LogOnlyFailures',這會與 Verify 物件上已經存在的設定併入。 驗證呼叫是在 try-finally 區塊內進行,因此在 finally 區塊期間,可以使用 'guard' 物件來還原原始設定。

以例外狀況為基礎的驗證使用方式

根據預設,驗證方法會在驗證失敗時擲回例外狀況。 在 TAEF 下執行時,如果例外狀況擲出至測試方法,測試將會失敗。 例如:

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   }

在此範例中,永遠不會進行第二個 Verify 呼叫,因為第一個會擲回例外狀況並失敗測試。 驗證 API 上的設定支援可用來變更此行為,讓失敗的驗證不會擲回,這樣會允許後續的 Verify 呼叫進行。 這特別適用于驗證一組參數,並確定已寫出所有驗證。

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   }

因為例外狀況已停用,所以這兩個驗證都會寫入記錄。

在 TAEF 外部使用可編寫腳本的驗證 API

可編寫腳本的驗證 API 可以在 TAEF 外部使用。 請確定Te.Common.dll已註冊,如 安裝一節所述,並簡單建立 「TE」。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");

上述程式碼會在透過 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

'WEX。Logger.Log' API可用來視需要 (設定 WEX 記錄器,例如,作為子進程) ,而且可編寫腳本的 Verify API 會利用該設定。