다음을 통해 공유


프레임워크 확인

테스트를 더 쉽게 작성할 수 있도록 TAEF는 WexLogger 를 활용하여 최소한의 코드로 자세한 로그를 보고하는 "확인" 프레임워크를 제공합니다. Verify 프레임워크는 테스트가 구조적 로그 출력을 제공하는 데 도움이 됩니다. 지정된 확인이 성공하면 성공적인 로그를 출력하고 확인에 실패하면 자세한 정보를 출력합니다.

C++에서 확인 사용

Verify API는 "Verify.h" 헤더 파일에 정의된 매크로 집합으로 C++에 표시됩니다(참고: Verify.h를 명시적으로 포함할 필요는 없습니다. C++ 테스트를 표시하고 Verify 및 WexLogger API와 상호 작용하는 데 필요한 모든 것을 포함하는 "WexTestClass.h"를 포함해야 함).

네이티브 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(condition, [optional message]) 지정된 부울이 true인지 확인합니다. Call VERIFY_IS_TRUE(!! win32 BOOL을 테스트하기 위한 __condition) 또는 VERIFY_WIN32_BOOL_SUCCEEDED(__condition)입니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_IS_FALSE(condition, [optional message]) 지정된 bool이 false인지 확인합니다. Call VERIFY_IS_FALSE(!! win32 BOOL을 테스트하기 위한 __condition) 또는 VERIFY_WIN32_BOOL_FAILED(__condition)입니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_IS_NULL(object, [optional message]) 지정된 매개 변수가 NULL인지 확인합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_IS_NOT_NULL(object, [optional message]) 지정된 매개 변수가 NULL이 아닌지 확인합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_SUCCEEDED(hresult, [선택적 메시지]) 지정된 HRESULT가 성공했는지 확인합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_SUCCEEDED_RETURN(hresult, [선택적 메시지]) 지정된 HRESULT가 성공했는지 확인하고 매크로에 전달된 HRESULT를 반환합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_FAILED(hresult, [선택적 메시지]) 지정된 HRESULT가 성공하지 못했는지 확인합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_FAILED_RETURN(hresult, [선택적 메시지]) 지정된 HRESULT가 성공하지 못했는지 확인하고 매크로에 전달된 HRESULT를 반환합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_THROWS(operation, exception, [optional message]) 지정된 작업이 지정된 예외 형식을 throw하는지 확인합니다. 또한 제공된 경우 사용자 지정 메시지를 기록합니다.
VERIFY_NO_THROW(operation, [optional message]) 지정된 작업이 예외를 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" 매크로를 지정하면 확인 매크로는 기본적으로 오류 시 오류를 로깅한 다음 네이티브 C++ 예외를 throw합니다. throw된 예외는 WEX::TestExecution::VerifyFailureException입니다. 이 예외를 catch할 필요가 없습니다. TAEF 프레임워크는 이를 catch하고 다음 테스트 사례로 이동합니다.

필요에 따라 첫 번째 확인 실패 시 테스트가 중단되는 대신 연속으로 일련의 확인을 수행하려는 경우 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)" 블록 내에서만 비활성화되고 첫 번째 verify 호출이 실패하면 두 번째 verify 호출이 계속 이루어집니다.

DisableVerifyExceptions 클래스는 다시 계산되며 스레드 단위로도 작동합니다.

예외가 아닌 기반 사용 확인

소스 코드가 C++ 예외를 사용하도록 설정하여 컴파일 되지 않은 경우 확인이 실패할 때 Verify 매크로가 네이티브 C++를 throw하지 않습니다. 또한 소스 코드가 C++ 예외를 사용하도록 설정하여 컴파일되었지만 예외 확인을 사용하지 않으려면 "WexTestClass.h"를 포함하기 전에 #define NO_VERIFY_EXCEPTIONS.

이 모델에서는 C++ 예외에 의존하지 않고 테스트 사례의 흐름을 제어하기 위해 일련의 중첩된 if 문을 수행해야 합니다.

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

출력 설정 확인

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

위의 예제에서 지정된 설정은 "if (NULL != m_key)" 블록 내에서 발생한 호출과 관련이 있으며 실패한 확인 호출 기록됩니다. 그러나 세 번째 확인 호출은 성공하더라도 기록됩니다. SetVerifyOutput 클래스가 scope 벗어났기 때문입니다.

확인 출력을 설정하기 위한 다음 옵션이 있습니다.

VerifyOutputSettings::LogOnlyFailures
실패한 확인 호출만 기록됩니다. 성공한 모든 호출은 무시됩니다.

VerifyOutputSettings::LogFailuresAsBlocked
오류를 로깅하는 대신 모든 오류를 차단됨으로 기록합니다.

VerifyOutputSettings::LogFailuresAsWarnings
오류를 로깅하는 대신 모든 오류를 경고로 기록합니다.

VerifyOutputSettings::LogValuesOnSuccess
Verify 호출이 성공하더라도 전달된 매개 변수 값을 기록합니다.

출력 설정이 OR일 수 있는지 확인하여 여러 설정을 사용하도록 설정합니다.

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 네임스페이스에 있어야 합니다. 또한 AreEqual, AreSame, IsLessThan, 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# Verify 사용량은 C++의 사용량과 비슷합니다. 그러나 WEX를 통해 제공됩니다 . testExecution.Verify 클래스는 Te.Managed.dll내에 있습니다.

다음 Verify 메서드는 C# 테스트에 사용할 수 있습니다.

매크로 기능
AreEqual(object expected, object actual) 지정된 두 개체가 같은지 확인합니다.
AreEqual(object expected, object actual, string message) 지정된 두 개체가 같은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
AreEqual<T>(T expected, T actual) 지정된 두 개체가 같은지 확인합니다.
AreEqual<T>(T expected, T actual, string message) 지정된 두 개체가 같은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
AreNotEqual(object expected, object actual) 지정된 두 개체가 같지 않은지 확인합니다.
AreNotEqual(object expected, object actual, string message) 지정된 두 개체가 같지 않은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
AreNotEqual<T>(T expected, T actual) 지정된 두 개체가 같지 않은지 확인합니다.
AreNotEqual<T>(T expected, T actual, string message) 지정된 두 개체가 같지 않은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
AreSame(object expected, object actual) 지정된 두 매개 변수가 동일한 개체를 참조하는지 확인합니다.
AreSame(object expected, object actual, string message) 지정된 두 매개 변수가 동일한 개체를 참조하는지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
AreNotSame(object expected, object actual) 지정된 두 매개 변수가 동일한 개체를 참조하지 않는지 확인합니다.
AreNotSame(object expected, object actual, string message) 지정된 두 매개 변수가 동일한 개체를 참조하지 않는지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess) 첫 번째 매개 변수가 두 번째 매개 변수보다 큰지 확인합니다.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, string message) 첫 번째 매개 변수가 두 번째 매개 변수보다 큰지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess) 첫 번째 매개 변수가 두 번째 매개 변수보다 크거나 같은지 확인합니다.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, string message) 첫 번째 매개 변수가 두 번째 매개 변수보다 크거나 같은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
IsLessThan(IComparable expectedLess, IComparable expectedGreater) 첫 번째 매개 변수가 두 번째 매개 변수보다 작은지 확인합니다.
IsLessThan(IComparable expectedLess, IComparable expectedGreater, 문자열 메시지) 첫 번째 매개 변수가 두 번째 매개 변수보다 작은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) 첫 번째 매개 변수가 두 번째 매개 변수보다 작거나 같은지 확인합니다.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, 문자열 메시지) 첫 번째 매개 변수가 두 번째 매개 변수보다 작거나 같은지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
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이 아닌지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.
Throw> T<(VerifyOperation 작업) 지정된 작업이 지정된 예외 형식을 throw하는지 확인합니다. 또한 추가 검사를 위해 예외를 반환합니다.
T>(VerifyOperation 작업, 문자열 메시지)를 throw합니다<. 지정된 작업이 지정된 예외 형식을 throw하는지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다. 또한 추가 검사를 위해 예외를 반환합니다.
NoThrow(VerifyOperation 작업) 지정된 작업이 예외를 throw하지 않는지 확인합니다.
NoThrow(VerifyOperation 작업, 문자열 메시지) 지정된 작업이 예외를 throw하지 않는지 확인합니다. 는 확인 성공 또는 실패에 대한 사용자 지정 메시지를 기록합니다.

예외 기반 사용 확인

C# 테스트 사례에서 확인 오류가 발생하면 오류는 로거 및 WEX에 기록됩니다 . TestExecution.VerifyFailureException 이 throw됩니다. 네이티브 C++ 모델에서와 마찬가지로 이러한 예외를 catch하는 것에 대해 걱정할 필요가 없습니다. TAEF 프레임워크는 이를 포착하고 다음 테스트 사례로 이동합니다.

필요에 따라 첫 번째 확인 실패 시 테스트가 중단되는 대신 연속으로 일련의 확인을 수행하려는 경우 DisableVerifyExceptions 클래스를 사용할 수 있습니다. 개체의 수명은 예외가 사용하지 않도록 설정된 시간을 제어합니다. DisableVerifyExceptions 클래스는 ref-counted이며 스레드별로 함수가 사용됩니다.

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

위의 예제에서 첫 번째 verify 호출이 실패하면 두 번째 verify 호출이 계속 이루어집니다.

또는 아래 예제와 같은 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)를 표시하고 추가를 클릭하고 드롭다운에서 "공용 언어 런타임 예외"를 선택하고 "WEX"를 배치합니다. 이름 필드의 TestExecution.VerifyFailureException"

출력 설정 확인

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

위의 예제에서는 using 블록 내에서 실패한 유일한 호출이므로 두 번째 verify 호출만 기록되어야 합니다. 그러나 세 번째 확인 호출은 성공하더라도 기록 됩니다 . SetVerifyOutput 클래스가 scope 벗어났기 때문입니다.

또는 아래 표시된 예제와 같이 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
오류를 로깅하는 대신 모든 오류를 경고로 기록합니다.

출력 설정이 OR일 수 있는지 확인하여 여러 설정을 사용하도록 설정합니다.

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

스크립트에서 확인 사용

C++ 및 C#과 동일한 사용 패턴에 따라 스크립트 언어에 대해서도 Verify API가 표시됩니다.

설치

TAEF 테스트 메서드 내에서 스크립팅 가능한 확인 API를 사용하는 경우 설치가 필요하지 않습니다. 필요한 API는 '등록 무료 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' 요소를 사용하여 전역 scope Verify 변수를 정의합니다. 줄 8은 'reference' 요소를 사용하여 지정된 형식 라이브러리(이 경우 Te.Common.dll 형식 라이브러리)의 모든 상수를 스크립트의 전역 scope 포함합니다. 이 경우 '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

Scriptable Verify API

스크립팅 가능한 Verify API의 유효성 검사 방법은 다음과 같습니다.

메서드 기능
bool Verify.AreEqual(expected, actual, [optional message]) 두 값이 같은지 확인합니다. 'VerifySettings_CoerceTypes' 설정을 사용하는 경우 이 메서드는 같음의 JScript 정의를 사용합니다. 'VerifySettings_CoerceTypes' 설정을 사용하지 않으면 메서드는 ID의 JScript 정의를 사용합니다. 'VerifySettings_CoerceTypes'은 기본적으로 켜집니다.
bool Verify.AreNotEqual(expected, actual, [optional message]) 두 값이 같지 않은지 확인합니다. 'VerifySettings_CoerceTypes' 설정을 사용하는 경우 이 메서드는 같음의 JScript 정의를 사용합니다. 'VerifySettings_CoerceTypes' 설정을 사용하지 않으면 메서드는 ID의 JScript 정의를 사용합니다. 'VerifySettings_CoerceTypes'은 기본적으로 켜집니다.
bool Verify.IsGreaterThan(expectedGreater, expectedLess, [optional message]) 첫 번째 값이 두 번째 값보다 큰지 확인합니다.
bool Verify.IsGreaterThanOrEqual(expectedGreater, expectedLess, [optional message]) 첫 번째 값이 두 번째 값보다 크거나 같은지 확인합니다.
bool Verify.IsLessThan(expectedLess, expectedGreater, [optional message]) 첫 번째 값이 두 번째 값보다 작은지 확인합니다.
bool Verify.IsLessThanOrEqual(expectedLess, expectedGreater, [optional message]) 첫 번째 값이 두 번째 값보다 작거나 같은지 확인합니다.
bool Verify.AreSame(expected, actual, [optional message]) 값이 동일한지 확인합니다.
bool Verify.AreNotSame(expected, actual, [optional message]) 값이 동일하지 않은지 확인합니다.
bool Verify.Fail([선택적 메시지]) 조건을 확인하지 않고 실패합니다.
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]) 지정된 함수가 및 예외를 throw하는지 확인합니다.
bool Verify.NoThrow(function, [optional message]) 지정된 함수가 및 예외를 throw하지 않는지 확인합니다.

Verify 클래스에는 설정을 제어하기 위한 두 가지 메서드가 있습니다.

메서드 기능
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
확인할 매개 변수 값은 로그 확인 메시지의 일부로 작성됩니다. 이 기능은 기본적으로 켜집니다.

VerifySettings_CoerceTypes = 0x1000
Verify 메서드에 전달된 값은 JScript 강제 변환 규칙에 따라 강제 변환됩니다. 이 기능은 기본적으로 켜집니다.

VerifySettings_DisableExceptions = 0x2000
유효성 검사에 실패하면 예외가 throw되지 않습니다.

설정 확인

Verify API는 동작을 구성하는 설정을 제공합니다. 'EnableSettings' 및 'DisableSettings' 메서드를 사용하여 Verify 클래스에서 유지 관리하는 특정 설정을 사용하거나 사용하지 않도록 설정할 수 있습니다. 메서드는 하나 이상의 설정을 사용하여 사용하거나 사용하지 않도록 설정합니다.

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

한 번의 호출에서 여러 설정을 사용하거나 사용하지 않도록 설정하려면 여러 'VerifySettings' 플래그를 포함할 수 있습니다.

    Verify.EnableSettings(VerifySettings_LogOnlyFailures | VerifySettings_DisableExceptions);

EnableSettings 및 DisableSettings 메서드는 원래 설정을 복원하는 데 사용할 수 있는 개체를 반환하므로 지정된 scope 설정을 사용하거나 사용하지 않도록 설정할 수 있습니다.

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 블록 내에서 이루어지므로 최종 블록 동안 'guard' 개체를 사용하여 원래 설정을 복원할 수 있습니다.

예외 기반 사용 확인

기본적으로 Verify 메서드는 확인이 실패할 때 예외를 throw합니다. 테스트 메서드에서 예외가 throw된 경우 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 호출이 수행되지 않습니다. 첫 번째 호출은 예외를 throw하고 테스트에 실패하기 때문에 수행되지 않습니다. 확인 API의 설정 지원을 사용하여 이 동작을 변경할 수 있으므로 실패한 확인이 throw되지 않으므로 후속 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 사용

스크립팅 가능한 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가 해당 구성을 활용합니다.