次の方法で共有


フレームワークを検証する

テストの記述を容易にするために、TAEF には WexLogger を利用して最小限のコードで詳細なログを報告する "Verify" フレームワークが用意されています。 Verify フレームワークは、テストで構造化されたログ出力を提供するのに役立ちます。特定の検証が成功した場合は成功したログが出力され、検証が失敗した場合は詳細情報が出力されます。

C++ から Verify を使用する

Verify API は、"Verify.h" ヘッダー ファイルで定義されているマクロのセットとして C++ に表示されます (注: Verify.h を明示的に含める必要はありませんが、C++ テストのマークアップと Verify や WexLogger API とのやり取りに必要なものがすべて含まれている "WexTestClass.h" は含めるようにしてください)。

以下の Verify マクロを、ネイティブ C++ テストで使用できます。

マクロ 機能
VERIFY_ARE_EQUAL(expected, actual, [optional message]) 2 つの指定したオブジェクトが等しいことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_ARE_NOT_EQUAL(expected, actual, [optional message]) 2 つの指定したオブジェクトが等しくないことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_GREATER_THAN(expectedGreater, expectedLess, [optional message]) 1 番目のパラメータが 2 番目のパラメータより大きいことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_GREATER_THAN_OR_EQUAL(expectedGreater, expectedLess, [optional message]) 1 番目のパラメーターが 2 番目のパラメーター以上であることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_LESS_THAN(expectedLess, expectedGreater, [optional message]) 1 番目のパラメータが 2 番目のパラメータより小さいことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_LESS_THAN_OR_EQUAL(expectedLess, expectedGreater, [optional message]) 1 番目のパラメーターが 2 番目のパラメーター以下であることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_ARE_SAME(expected, actual, [optional message]) 指定した 2 つのパラメーターが同じオブジェクトを参照していることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_ARE_NOT_SAME(expected, actual, [optional message]) 指定した 2 つのパラメーターが同じオブジェクトを参照していないことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_FAIL ([optional message]) 条件を確認せずに失敗にします。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_TRUE(condition, [optional message]) 指定したブール値が true であることを検証します。 VERIFY_IS_TRUE(!!__condition) か VERIFY_WIN32_BOOL_SUCCEEDED(__condition) を呼び出して Win32 BOOL をテストします。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_FALSE(condition, [optional message]) 指定したブール値が false であることを検証します。 VERIFY_IS_FALSE(!!__condition) か VERIFY_WIN32_BOOL_FAILED(__condition) を呼び出して Win32 BOOL をテストします。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_NULL(object, [optional message]) 指定したパラメーターが NULL であることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_IS_NOT_NULL(object, [optional message]) 指定したパラメーターが NULL でないことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_SUCCEEDED(hresult, [optional message]) 指定した HRESULT が成功していることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_SUCCEEDED_RETURN(hresult, [optional message]) 指定した HRESULT が成功していることを検証し、マクロに渡された HRESULT を返します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_FAILED(hresult, [optional message]) 指定した HRESULT が成功していないことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_FAILED_RETURN(hresult, [optional message]) 指定した HRESULT が成功していないことを検証し、マクロに渡された HRESULT を返します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_THROWS(operation, exception, [optional message]) 指定した操作によって特定の種類の例外がスローされることを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_NO_THROW(operation, [optional message]) 指定した操作によって例外がスローされないことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_SUCCEEDED(win32Result, [optional message]) 指定した Win32 の結果が成功したことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_SUCCEEDED_RETURN(win32Result, [optional message]) 指定した Win32 の結果が成功したことを検証し、マクロに渡された LONG を返します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_FAILED(win32Result, [optional message]) 指定した Win32 の結果が失敗したことを検証します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_FAILED_RETURN(win32Result, [optional message]) 指定した Win32 の結果が失敗したことを検証し、マクロに渡された LONG を返します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_BOOL_SUCCEEDED(win32Bool, [optional message]) 指定した Win32 BOOL が成功した (!= FALSE) ことを検証します。 検証に失敗した場合、GetLastError() の結果をログに記録します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN(win32Bool, [optional message]) 指定した Win32 BOOL が成功した (!= FALSE) ことを検証し、マクロに渡された BOOL を返します。 検証に失敗した場合、GetLastError() の結果をログに記録します。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_BOOL_FAILED(win32Bool, [optional message]) 指定した Win32 BOOL が失敗した (== FALSE) ことを検証します。 GetLastError() の結果はログに記録しません。 指定している場合はカスタム メッセージもログに記録されます。
VERIFY_WIN32_BOOL_FAILED_RETURN(win32Bool, [optional message]) 指定した Win32 BOOL が失敗した (== FALSE) ことを検証し、マクロに渡された BOOL を返します。 GetLastError() の結果はログに記録しません。 指定している場合はカスタム メッセージもログに記録されます。

例外ベースの Verify の使い方

ソース コードが 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));
}

上の例では、例外は "if (NULL != m_key)" ブロック内でのみ無効になり、1 番目に呼び出した検証が失敗した場合でも、2 番目の検証が呼び出されます。

DisableVerifyExceptions クラスは参照カウントされ、スレッド単位でも機能します。

例外ベースでない Verify の使い方

ソース コードが C++ の例外を有効にした状態でコンパイルされていない場合、Verify マクロは検証に失敗してもネイティブ C++ をスローしません。 さらに、ソース コードが C++ の例外を有効にした状態でコンパイルされている場合であっても、"WexTestClass.h" を含める前に NO_VERIFY_EXCEPTIONS を定義するだけで、Verify の例外を無効にできます。

このモデルでは、C++ の例外に依存するのではなく、テスト ケースのフローを制御するために、入れ子になった一連の if ステートメントを実行する必要があります。

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

Verify の出力設定

Verify API によって生成される出力をカスタマイズする場合は、SetVerifyOutput クラスを使用します。 出力設定が設定されている期間を制御するには、オブジェクトの有効期間を使用します。 SetVerifyOutput クラスは参照カウントされ、スレッド単位で機能します。

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

上の例では、指定した設定は "if (NULL != m_key)" ブロック内で行われた呼び出しのみに反映され、失敗した検証呼び出しのみがログに記録されます。 ただし、3 番目に呼び出された検証は、成功してもログに記録されます。 これは、SetVerifyOutput クラスが対象外になったことが理由です。

検証の出力設定には、以下のオプションがあります。

VerifyOutputSettings::LogOnlyFailures
失敗した検証呼び出しのみがログに記録されます。成功した呼び出しはすべて無視されます。

VerifyOutputSettings::LogFailuresAsBlocked
失敗をすべてエラーとしてではなく、ブロック済みとしてログに記録します。

VerifyOutputSettings::LogFailuresAsWarnings
失敗をすべてエラーとしてではなく、警告としてログに記録します。

VerifyOutputSettings::LogValuesOnSuccess
Verify の呼び出しが成功した場合でも、渡されたパラメーターの値をログに記録します。

Verify の出力設定では、または ("|") でつなげることで複数の設定を有効にできます。

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

カスタム型の値を出力する

C++ Verify フレームワークには、カスタム型の詳細な出力を生成する機能が用意されています。 そのためには、WEX::TestExecution::VerifyOutputTraits クラス テンプレートの特殊化を実装する必要があります。

WEX::TestExecution::VerifyOutputTraits クラス テンプレートの特殊化は、WEX::TestExecution 名前空間に存在する必要があります。 また、クラスへの参照を受け取り、その値の文字列表現を含む WEX::Common::NoThrowString を返す ToString という公開静的メソッドを提供することも想定されています。

    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++ Verify フレームワークには、対応する演算子オーバーロード (operator= や operator< など) を実装しないカスタム型の比較子を定義する機能が用意されています。 そのためには、WEX::TestExecution::VerifyCompareTraits クラス テンプレートの特殊化を実装する必要があります。

WEX::TestExecution::VerifyCompareTraits クラス テンプレートの特殊化は、WEX::TestExecution 名前空間に存在する必要があります。 また、AreEqualAreSameIsLessThanIsGreaterThanIsNull と呼ばれる公開静的メソッドを提供することも想定されています。

    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# から Verify を使用する

C# での Verify の使い方は、C++ の場合と似ています。 ただし、Te.Managed.dll 内にある WEX.TestExecution.Verify クラス経由で提供される点が異なります。

C# テストでは、以下の Verify メソッドを使用できます。

マクロ 機能
AreEqual(object expected, object actual) 2 つの指定したオブジェクトが等しいことを検証します。
AreEqual(object expected, object actual, string message) 指定した 2 つのオブジェクトが等しいことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
AreEqual<T>(T expected, T actual) 2 つの指定したオブジェクトが等しいことを検証します。
AreEqual<T>(T expected, T actual, string message) 指定した 2 つのオブジェクトが等しいことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
AreNotEqual(object expected, object actual) 2 つの指定したオブジェクトが等しくないことを検証します。
AreNotEqual(object expected, object actual, string message) 指定した 2 つのオブジェクトが等しくないことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
AreNotEqual<T>(T expected, T actual) 2 つの指定したオブジェクトが等しくないことを検証します。
AreNotEqual<T>(T expected, T actual, string message) 指定した 2 つのオブジェクトが等しくないことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
AreSame(object expected, object actual) 指定した 2 つのパラメーターが同じオブジェクトを参照していることを検証します。
AreSame(object expected, object actual, string message) 指定した 2 つのパラメーター同じオブジェクトを参照していることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
AreNotSame(object expected, object actual) 指定した 2 つのパラメーターが同じオブジェクトを参照していないことを検証します。
AreNotSame(object expected, object actual, string message) 指定した 2 つのパラメーター同じオブジェクトを参照していないことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess) 1 番目のパラメータが 2 番目のパラメータより大きいことを検証します。
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, string message) 1 番目のパラメーターが 2 番目のパラメーターより大きいことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess) 1 番目のパラメーターが 2 番目のパラメーター以上であることを検証します。
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, string message) 1 番目のパラメーターが 2 番目のパラメーター以上であることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsLessThan(IComparable expectedLess, IComparable expectedGreater) 1 番目のパラメータが 2 番目のパラメータより小さいことを検証します。
IsLessThan(IComparable expectedLess, IComparable expectedGreater, string message) 1 番目のパラメーターが 2 番目のパラメーターより小さいことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) 1 番目のパラメーターが 2 番目のパラメーター以下であることを検証します。
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, string message) 1 番目のパラメーターが 2 番目のパラメーター以下であることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
Fail(string message) 条件を確認せずに失敗にします。
IsTrue(bool condition) 指定した条件が true であることを検証します。
IsTrue(bool condition, string message) 指定した条件が true であることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsFalse(bool condition) 指定した条件が false であることを検証します。
IsFalse(bool condition, string message) 指定した条件が false であることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsNull(object obj) 指定したパラメーターが NULL であることを検証します。
IsNull(object obj, string message) 指定したパラメーターが NULL であることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
IsNotNull(object obj) 指定したパラメーターが NULL でないことを検証します。
IsNotNull(object obj, string message) 指定したパラメーターが NULL でないことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。
Throws<T>(VerifyOperation operation) 指定した操作によって特定の種類の例外がスローされることを検証します。 さらに調査を進められるように、例外も返されます。
Throws<T>(VerifyOperation operation, string message) 指定した操作で特定の種類の例外がスローされることを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。 さらに調査を進められるように、例外も返されます。
NoThrow(VerifyOperation operation) 指定した操作によって例外がスローされないことを検証します。
NoThrow(VerifyOperation operation, string message) 指定した操作で例外がスローされないことを検証し、検証の成功または失敗に関するカスタム メッセージをログに記録します。

例外ベースの Verify の使い方

C# のテスト ケースで検証に失敗すると、エラーがロガーに書き込まれ、WEX.TestExecution.VerifyFailureException がスローされます。 ネイティブ C++ モデルのときと同じく、これらの例外のキャッチについて心配する必要はありません。 例外は TAEF フレームワークがキャッチし、次のテスト ケースに進みます。

必要に応じて、DisableVerifyExceptions クラスを使用すれば、最初の検証に失敗した段階でテストを中止するのではなく、一連の検証を実行することができます。 例外が無効になるまでの期間を制御するには、オブジェクトの有効期間を使用します。 DisableVerifyExceptions クラスは参照カウントされ、スレッド単位で機能します。

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

上の例では、1 番目に呼び出した検証が失敗した場合でも、2 番目の検証が呼び出されます。

または、次の例のように Verify 操作の前に Verify.DisableVerifyExceptions = true を設定しても、同じ結果が得られます。

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

そのようなオプションを使用できる場合でも、using ブロック内で DisableVerifyExeptions をオブジェクトとして宣言することが推奨されます。

検証エラーが発生したときにデバッガーを停止するには、例外ダイアログ (Ctrl + Alt + E) を表示し、[追加] をクリックし、ドロップダウンで [Common Language Runtime Exceptions] (共通言語ランタイム例外) を選択し、[名前] フィールドに「WEX.TestExecution.VerifyFailureException」と入力します。

Verify の出力設定

Verify API によって生成される出力をカスタマイズする場合は、SetVerifyOutput クラスを使用します。 出力設定が設定されている期間を制御するには、オブジェクトの有効期間を使用します。 SetVerifyOutput クラスは参照カウントされ、スレッド単位で機能します。

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

上の例では、using ブロック内で失敗する唯一の呼び出しである、2 番目に呼び出される検証のみがログに記録される必要があります。 ただし、3 番目に呼び出される検証は、成功してもログに記録されます。 これは、SetVerifyOutput クラスが対象外になったことが理由です。

または、次の例のように Verify 操作の前に Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures を設定しても、同じ結果が得られます。

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

そのようなオプションを使用できる場合でも、using ブロック内で SetVerifyOutput をオブジェクトとして宣言することが推奨されます。

検証の出力設定には、以下のオプションがあります。

VerifyOutputSettings.LogOnlyFailures
失敗した検証呼び出しのみがログに記録されます。成功した呼び出しはすべて無視されます。

VerifyOutputSettings.LogFailuresAsBlocked
失敗をすべてエラーとしてではなく、ブロック済みとしてログに記録します。

VerifyOutputSettings.LogFailuresAsWarnings
失敗をすべてエラーとしてではなく、警告としてログに記録します。

Verify の出力設定では、または ("|") でつなげることで複数の設定を有効にできます。

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

スクリプトから Verify を使用する

Verify API は、C++ および C# と同じ使用パターンに従って、スクリプト言語にも表示されます。

設置

TAEF のテスト メソッド内からスクリプト可能な Verify API を使用する場合、インストールは不要です。必要な API は "Registration Free COM" を使用して登録されます。 TAEF テスト メソッドの外部 (TAEF の外部または子プロセス内) からスクリプト可能な API を使用するには、次の例のように、管理者特権でのコマンド プロンプトで regsvr32 を使用して Te.Common.dll バイナリを登録するだけです。

regsvr32 Te.Common.dll

ラボ実行用の展開ファイルを使用して TAEF を展開すると、Te.Common.dll が自動的に登録されます。

使用率

スクリプト可能な Verify 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 行目は、Verify 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

スクリプト可能な Verify API

スクリプト可能な Verify API での検証用のメソッドは、以下のとおりです。

メソッド 機能
bool Verify.AreEqual(expected, actual, [optional message]) 2 つの値が等しいことを検証します。 "VerifySettings_CoerceTypes" 設定が有効になっている場合には、このメソッドでは JScript の等価の定義が使用されます。"VerifySettings_CoerceTypes" 設定が有効になっていない場合には、このメソッドでは JScript の ID の定義が使用されます。 " VerifySettings_CoerceTypes" は、既定でオンになっています。
bool Verify.AreNotEqual(expected, actual, [optional message]) 2 つの値が等しくないことを検証します。 "VerifySettings_CoerceTypes" 設定が有効になっている場合には、このメソッドでは JScript の等価の定義が使用されます。"VerifySettings_CoerceTypes" 設定が有効になっていない場合には、このメソッドでは JScript の ID の定義が使用されます。 " VerifySettings_CoerceTypes" は、既定でオンになっています。
bool Verify.IsGreaterThan(expectedGreater, expectedLess, [optional message]) 1 番目の値が 2 番目の値より大きいことを検証します。
bool Verify.IsGreaterThanOrEqual(expectedGreater, expectedLess, [optional message]) 1 番目の値が 2 番目の値以上であることを検証します。
bool Verify.IsLessThan(expectedLess, expectedGreater, [optional message]) 1 番目の値が 2 番目の値より小さいことを検証します。
bool Verify.IsLessThanOrEqual(expectedLess, expectedGreater, [optional message]) 1 番目の値が 2 番目の値以下であることを検証します。
bool Verify.AreSame(expected, actual, [optional message]) 値が同じであることを検証します。
bool Verify.AreNotSame(expected, actual, [optional message]) 値が同じでないことを検証します。
bool Verify.Fail([optional message]) 条件を確認せずに失敗にします。
bool Verify.IsTrue(expression, [optional message]) 指定した式が true と評価されることを検証します。
bool Verify.IsFalse(expression, [optional message]) 指定した式が false と評価されることを検証します。
bool Verify.IsNull(expected, [optional message]) 指定した値が "null" であることを検証します。
bool Verify.IsNotNull(expected, [optional message]) 指定した値が "null" でないことを検証します。
bool Verify.Throws(function, [optional message]) 指定した関数が例外をスローすることを検証します。
bool Verify.NoThrow(function, [optional message]) 指定された関数が例外をスローしないことを検証します。

設定を制御するための Verify クラスには、以下の 2 つのメソッドがあります。

メソッド 機能
object Verify.EnableSettings(settings) 指定した設定フラグ (複数可) が有効になります。
object Verify.DisableSettings(settings) 指定した設定フラグ (複数可) が無効になります。

Verify.EnableSettings メソッドか Verify.DisableSettings メソッドに渡される設定値には、以下のいずれかの値を指定できます。

VerifySettings_LogOnlyFailures = 0x01
失敗のみがログに記録されます。成功した Verify 呼び出しは出力されません。

VerifySettings_LogFailuresAsBlocked = 0x02
失敗は既定の "エラー" としてではなく、"ブロック済み" としてログに記録されます。

VerifySettings_LogFailuresAsWarnings = 0x04
失敗は既定の "エラー" としてではなく、"警告" としてログに記録されます。

VerifySettings_LogValuesOnSuccess = 0x08
検証するパラメーターの値は、Verify のログ メッセージの一部として書き込まれます。 これは既定でオンになります。

VerifySettings_CoerceTypes = 0x1000
Verify メソッドに渡される値は、JScript の強制規則に従って強制されます。 これは既定でオンになります。

VerifySettings_DisableExceptions = 0x2000
検証に失敗した場合、例外はスローされません。

Verify の設定

Verify API には、動作を構成するための設定が用意されています。 "EnableSettings" メソッドと "DisableSettings" メソッドを使用して、Verify クラスが保持する特定の設定の有効と無効を切り替えることができます。 メソッドは、1 つ以上の設定の有効と無効を切り替えられます。

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

1 回の呼び出しで複数の設定の有効と無効を切り替えるには、複数の "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 オブジェクトに既に存在する設定に組み込まれています。 Verify は try-finally 間のブロック内で呼び出されるので、finally ブロックで "guard" オブジェクトを使用することで元の設定を復元できます。

例外ベースの Verify の使い方

既定では、Verify メソッドは検証に失敗すると例外をスローします。 テスト メソッドから例外がスローされた場合、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   }

この例では、2 番目の Verify は呼び出されません。1 番目の呼び出しで例外がスローされ、テストが不合格になるからです。 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 外部でスクリプト可能な Verify API を使用する

スクリプト可能な Verify 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 が利用します。