Поделиться через


Проверка фреймворка

Чтобы упростить написание тестов, TAEF предоставляет платформу "Проверить", которая использует преимущества WexLogger для создания подробных журналов с минимальным количеством кода. Платформа проверки помогает тестам предоставлять структурированные выходные данные журнала. Он выводит успешный журнал, если данная проверка выполнена успешно, и выводит подробные сведения, если проверка завершается ошибкой.

Использование проверки из C++

API проверки отображается в C++ в виде набора макросов, определенных в файле заголовка "Verify.h" (Примечание. Не нужно явно включать Verify.h, следует включить "WexTestClass.h", который содержит все, что необходимо для пометки тестов C++ и взаимодействия с API Verify и WexLogger).

Для тестов на нативном 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(условие, [необязательное сообщение]) Проверяет, является ли указанный логическое значение истинным. Вызов VERIFY_IS_TRUE(!!__condition) или VERIFY_WIN32_BOOL_SUCCEEDED(__condition) для проверки Win32 BOOL. Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_IS_FALSE(условие, [необязательное сообщение]) Проверяет, что указанный логическое значение равно false. Вызовите VERIFY_IS_FALSE(!!__condition) или VERIFY_WIN32_BOOL_FAILED(__condition) для тестирования Win32 BOOL. Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_IS_NULL(object, [необязательное сообщение]) Проверяет, имеет ли указанный параметр значение NULL. Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_IS_NOT_NULL(object, [необязательное сообщение]) Проверяет, что указанный параметр не имеет значения 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 (!= FALSE). Регистрирует результат GetLastError() в случае сбоя проверки. Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN(win32Bool, [необязательное сообщение]) Проверяет, что указанный BOOL Win32 выполнен успешно (!= FALSE) и возвращает логическое значение, которое было передано в макрос. Регистрирует результат GetLastError() в случае сбоя проверки. Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_WIN32_BOOL_FAILED(win32Bool, [необязательное сообщение]) Проверяет, что указанный Win32 BOOL завершился с ошибкой (== FALSE). Не регистрирует результат GetLastError(). Кроме того, регистрирует настраиваемое сообщение при условии предоставления.
VERIFY_WIN32_BOOL_FAILED_RETURN(win32Bool, [необязательное сообщение]) Проверяет, завершился ли сбой указанного boOL Win32 (== FALSE) и возвращает логическое значение, переданное в макрос. Не регистрирует результат GetLastError(). Кроме того, регистрирует настраиваемое сообщение при условии предоставления.

Проверка использования на основе исключений

Если ваш исходный код компилируется с включённой поддержкой исключений C++ (указав ключ командной строки /EHsc или макрос "USE_NATIVE_EH=1" в файле исходников), то макросы проверки по умолчанию будут регистрировать ошибку при сбое, а затем выбрасывают исключение на уровне 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), а если первый вызов проверки завершается ошибкой, второй вызов проверки по-прежнему выполняется.

Класс DisableVerifyExceptions с подсчетом ссылок и работает в каждом потоке.

Проверка использования без основанности на исключениях

Если ваш исходный код не компилируется с включенными исключениями C++, макросы проверки не выбросят собственное исключение C++ в случае сбоя проверки. Кроме того, если исходный код компилируется с включенными исключениями C++, но вы хотите отключить исключения проверки, просто #define NO_VERIFY_EXCEPTIONS перед включением wexTestClass.h.

В этой модели необходимо выполнить ряд вложенных условных операторов, чтобы управлять потоком тестового случая, а не полагаться на исключения 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");

В приведенном выше примере указанные параметры относятся только к вызовам, выполненным в блоке "if (NULL != m_key) " и только вызов проверки, который завершается ошибкой. Тем не менее, третий вызов проверки будет зарегистрирован, даже если он успешно выполнен. Это связано с тем, что класс SetVerifyOutput вышел из области видимости.

Для задания выходных данных проверки существуют следующие параметры:

ПроверкаНастроекВывода::ТолькоЛогиОшибок
Регистрируются только неудачные вызовы проверки; Все успешные вызовы игнорируются.

VerifyOutputSettings::LogFailuresAsBlocked
Регистрируют все ошибки как заблокированные, а не регистрируют ошибку.

ПроверитьНастройкиВывода::ЗаписыватьОшибкиКакПредупреждения
Регистрируют все сбои в виде предупреждений, а не регистрируют ошибку.

VerifyOutputSettings::LogValuesOnSuccess
Запишите значения переданных параметров, даже если вызов проверки выполнен успешно.

Убедитесь, что параметры выходных данных можно объединить, чтобы включить несколько параметров:

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++ предоставляет возможность определять компраторы для пользовательских типов, которые не реализуют соответствующие перегрузки операторов (оператор=, оператор< и т. д.). Для этого необходимо реализовать специализацию шаблона класса WEX::TestExecution::VerifyCompareTraits .

Специализация шаблона класса WEX::TestExecution::VerifyCompareTraits должна существовать в пространстве имен WEX::TestExecution . Ожидается также, что он предоставляет общедоступные статические методы с именем AreEqual, AreSame, IsLessThan, IsGreaterThan и 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;
            }
        };
    }}

Использование проверки из C#

Использование C# Verify аналогично использованию C++. Однако он предоставляется с помощью класса WEX.TestExecution.Verify, который находится в Te.Managed.dll.

Для тестов C# доступны следующие методы проверки:

Макрос Функция
AreEqual(ожидаемый объект, фактический объект) Проверяет, равны ли два указанных объекта.
AreEqual(object expected, object actual, string message) Проверяет, равны ли два указанных объекта; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
AreEqual T>(T ожидаемый<, T фактический) Проверяет, равны ли два указанных объекта.
AreEqual<T>(T ожидаемое, T фактическое, строка сообщение) Проверяет, равны ли два указанных объекта; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
AreNotEqual(объект expected, объект actual) Проверяет, что два указанных объекта не равны.
НеРавны(объект ожидаемый, объект фактический, строка сообщение) Проверяет, что два указанных объекта не равны; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
AreNotEqual<T>(T ожидаемый, T фактический) Проверяет, что два указанных объекта не равны.
Не равны<T>(T expected, T actual, string message) Проверяет, что два указанных объекта не равны; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
AreSame(объект ожидаемый, фактический объект) Проверяет, что указанные два параметра ссылаются на один и тот же объект.
AreSame(object expected, object actual, string message) Проверяет, относятся ли два указанных параметра к одному объекту; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
AreNotSame (ожидаемый объект, фактический объект) Проверяет, что указанные два параметра не ссылаются на один и тот же объект.
НеОдинаковы(object expected, object actual, string message) Проверяет, что указанные два параметра не ссылаются на один и тот же объект; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
Больше(IComparable ожидаемоеБольшее, IComparable ожидаемоеМеньшее) Проверяет, что первый параметр больше второго параметра.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, строковое сообщение) Проверяет, что первый параметр больше второго параметра; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess) Проверяет, что первый параметр больше или равен второму параметру.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, строковое сообщение) Проверяет, что первый параметр больше или равен второму параметру; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsLessThan(IComparable ожидаемоеМеньшее, IComparable ожидаемоеБольшее) Проверяет, что первый параметр меньше второго параметра.
IsLessThan(IComparable expectedLess, IComparable expectedGreater, строковое сообщение) Проверяет, что первый параметр меньше второго параметра; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) Проверяет, что первый параметр меньше или равен второму параметру.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, сообщение типа string) Проверяет, что первый параметр меньше или равен второму параметру; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
Фейл(строковое сообщение) Завершается ошибкой без проверки каких-либо условий.
IsTrue(bool condition) Проверяет, является ли указанное условие истинным.
IsTrue(логическое условие, строковое сообщение) Проверяет, является ли указанное условие истинным; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsFalse(логическое условие) Проверяет, является ли указанное условие ложным.
IsFalse(логическое условие, строковое сообщение) Проверяет, является ли указанное условие ложным; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsNull(object obj) Проверяет, имеет ли указанный параметр значение NULL.
IsNull(object obj, строковое сообщение) Проверяет, имеет ли указанный параметр ЗНАЧЕНИЕ NULL; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
IsNotNull(object obj) Проверяет, что указанный параметр не имеет значения NULL.
IsNotNull(object obj, строковое сообщение) Проверяет, что указанный параметр не имеет значения NULL; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.
Выбрасывает<T>(операция VerifyOperation) Проверяет, вызывает ли указанная операция заданный тип исключения. Также возвращает исключение для дальнейшей проверки.
<Создает T>(операция VerifyOperation, строковое сообщение) Проверяет, что указанная операция вызывает заданный тип исключения; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое. Также возвращает исключение для дальнейшей проверки.
NoThrow(операция VerifyOperation) Проверяет, что указанная операция не создает исключение.
NoThrow(операция VerifyOperation, строковое сообщение) Проверяет, не вызывает ли указанная операция исключение; регистрирует настраиваемое сообщение о успешном выполнении проверки или сбое.

Проверка использования на основе исключений

Когда сбои проверки происходят в тестовых случаях C#, ошибка записывается в журнал, и выбрасывается WEX.TestExecution.VerifyFailureException. Точно так же, как и в родной модели C++, вам не нужно беспокоиться о перехвате этих исключений. Платформа TAEF будет перехватывать ее для вас и переходить к следующему тестового случая.

Опционально, если вы хотите выполнить ряд проверок подряд, вместо того чтобы прекращать тест при первом сбое проверки, можно использовать класс DisableVerifyExceptions. Время существования объекта определяет время отключения исключений. Класс DisableVerifyExceptions используется с подсчётом ссылок, а функции выполняются в каждом потоке.

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

Обратите внимание, что даже если такая опция доступна, объявление DisableVerifyExceptions в качестве объекта в блоке using по-прежнему является рекомендуемым вариантом.

Если вы хотите остановиться в отладчике при возникновении ошибки проверки, вызовите диалоговое окно исключений (Ctrl+Alt+E), нажмите кнопку "Добавить", выберите "Исключения среды CLR" в раскрывающемся списке и введите "WEX.TestExecution.VerifyFailureException" в поле Name.

Проверка параметров вывода

Если вы хотите настроить выходные данные, созданные 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. Тем не менее, третий вызов проверки будет зарегистрирован, даже если он успешно выполнен. Это связано с тем, что класс SetVerifyOutput вышел из области видимости.

Кроме того, можно добиться того же результата, установив параметр Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures перед операциями проверки, такими как приведенный ниже пример.

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

Обратите внимание, что хотя такой параметр доступен, объявление SetVerifyOutput в качестве объекта в блоке использования по-прежнему является рекомендуемым вариантом.

Для задания выходных данных проверки существуют следующие параметры:

ПроверкаНастроекВывода.ЗаписыватьТолькоОшибки
Регистрируются только неудачные вызовы проверки; Все успешные вызовы игнорируются.

ПроверкаНастроекВывода.ЖурналОшибокКакЗаблокированные
Регистрируют все ошибки как заблокированные, а не регистрируют ошибку.

VerifyOutputSettings.ЗаписыватьОшибкиКакПредупреждения
Регистрируют все сбои в виде предупреждений, а не регистрируют ошибку.

Убедитесь, что параметры выходных данных можно объединить, чтобы включить несколько параметров:

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

Проверка с помощью скрипта

API проверки также отображается для языков сценариев, следуя тем же шаблонам использования, что и C++ и C#.

Установка

При использовании скриптируемых API проверки из метода тестирования TAEF установка не требуется — необходимые API регистрируются с помощью технологии 'Registration Free COM'. Чтобы использовать скриптируемый API вне метода тестирования TAEF (вне TAEF или дочернего процесса), просто зарегистрируйте двоичный файл Te.Common.dll с помощью regsvr32 из командной строки с повышенными привилегиями; Например:

regsvr32 Te.Common.dll

При развертывании TAEF с помощью файла развертывания для выполнения задач в лаборатории Te.Common.dll автоматически регистрируется.

Употребление

Скриптируемые API проверки представлены через COM-класс 'TE.Common.Verify' — просто создайте экземпляр этого класса и вызывайте методы. Класс 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>

В этом примере определяется тестовый класс скрипта TAEF с одним методом HelloWorld. Строка 6 использует элемент object для определения переменной Verify в глобальной области. Строка 8 использует элемент 'ссылка' для включения всех констант из указанной библиотеки типов (в данном случае библиотеки типов 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 Verify представлены ниже.

Метод Функция
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(expected, actual, [необязательное сообщение]) Проверяет, что значения не совпадают.
bool Verify.Fail([необязательное сообщение]) Происходит сбой без проверки условий.
bool Verify.IsTrue(expression, [необязательное сообщение]) Проверяет, имеет ли данное выражение значение true.
bool Verify.IsFalse(expression, [необязательное сообщение]) Проверяет, имеет ли данное выражение значение false.
bool Verify.IsNull(ожидается, [необязательное сообщение]) Проверяет, что заданное значение равно NULL.
bool Verify.IsNotNull(ожидается, [необязательное сообщение]) Проверяет, что заданное значение не равно null.
bool Verify.Throws(function, [необязательное сообщение]) Проверяет, что данная функция выбрасывает исключение.
bool Verify.NoThrow(function, [необязательное сообщение]) Проверяет, что данная функция не вызывает исключение.

Существует два метода в классе 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
Исключения не будут выбрасываться при сбое валидации.

Проверка параметров

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   }

В этом примере второй вызов проверки никогда не будет выполнен, так как первый вызов вызовет исключение и завершится сбоем теста. Для изменения этого поведения можно использовать поддержку параметров в API проверки, поэтому неудачные проверки не вызываются, что позволит выполнять последующие вызовы проверки. Это особенно полезно для проверки набора параметров и убедитесь, что все проверки записаны.

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   }

Поскольку исключения были отключены, обе проверки будут записаны в журнал.

Использование API проверки сценариев за пределами TAEF

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

API WEX.Logger.Log можно использовать для настройки средства ведения журнала WEX по мере необходимости (например, в качестве дочернего процесса), а API Verify, поддерживающий сценарии, использует преимущества этой конфигурации.