Partilhar via


Verificar Estrutura

Para facilitar a gravação de Testes, o TAEF fornece a estrutura "Verificar" que aproveita o WexLogger para relatar logs detalhados com uma quantidade mínima de código. A estrutura Verify ajuda os Testes a fornecer saída de log estruturada – ela gera um log bem-sucedido se uma determinada verificação for bem-sucedida e gerará informações detalhadas se uma verificação falhar.

Usando Verificar do C++

A API Verify é exibida no C++ como um conjunto de macros definidas no arquivo de cabeçalho "Verify.h" (Observação: você não precisa incluir explicitamente Verify.h, você deve incluir "WexTestClass.h" que contém tudo o que você precisa para marcar testes C++ e interagir com as API Verify e WexLogger).

As macros de verificação a seguir estão disponíveis para testes C++ nativos:

Macro Funcionalidade
VERIFY_ARE_EQUAL(esperado, real, [mensagem opcional]) Verifica se dois objetos especificados são iguais. Também registra uma mensagem personalizada, se fornecida.
VERIFY_ARE_NOT_EQUAL(esperado, real, [mensagem opcional]) Verifica se dois objetos especificados não são iguais. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_GREATER_THAN(expectedGreater, expectedLess, [optional message]) Verifica se o primeiro parâmetro é maior que o segundo parâmetro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_GREATER_THAN_OR_EQUAL(expectedGreater, expectedLess, [optional message]) Verifica se o primeiro parâmetro é maior ou igual ao segundo parâmetro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_LESS_THAN(expectedLess, expectedGreater, [optional message]) Verifica se o primeiro parâmetro é menor que o segundo parâmetro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_LESS_THAN_OR_EQUAL(expectedLess, expectedGreater, [optional message]) Verifica se o primeiro parâmetro é menor ou igual ao segundo parâmetro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_ARE_SAME(esperado, real, [mensagem opcional]) Verifica se os dois parâmetros especificados se referem ao mesmo objeto. Também registra uma mensagem personalizada, se fornecida.
VERIFY_ARE_NOT_SAME(esperado, real, [mensagem opcional]) Verifica se os dois parâmetros especificados não se referem ao mesmo objeto. Também registra uma mensagem personalizada, se fornecida.
VERIFY_FAIL ([mensagem opcional]) Falha sem verificar nenhuma condição. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_TRUE(condição, [mensagem opcional]) Verifica se o bool especificado é verdadeiro. Chame VERIFY_IS_TRUE(!! __condition) ou VERIFY_WIN32_BOOL_SUCCEEDED(__condition) para testar um BOOL win32. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_FALSE(condição, [mensagem opcional]) Verifica se o bool especificado é false. Chame VERIFY_IS_FALSE(!! __condition) ou VERIFY_WIN32_BOOL_FAILED(__condition) para testar um BOOL do Win32. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_NULL(object, [optional message]) Verifica se o parâmetro especificado é NULL. Também registra uma mensagem personalizada, se fornecida.
VERIFY_IS_NOT_NULL(object, [optional message]) Verifica se o parâmetro especificado não é NULL. Também registra uma mensagem personalizada, se fornecida.
VERIFY_SUCCEEDED(hresult, [mensagem opcional]) Verifica se o HRESULT especificado foi bem-sucedido. Também registra uma mensagem personalizada, se fornecida.
VERIFY_SUCCEEDED_RETURN(hresult, [mensagem opcional]) Verifica se o HRESULT especificado foi bem-sucedido e retorna o HRESULT que foi passado para a macro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_FAILED(hresult, [mensagem opcional]) Verifica se o HRESULT especificado não foi bem-sucedido. Também registra uma mensagem personalizada, se fornecida.
VERIFY_FAILED_RETURN(hresult, [mensagem opcional]) Verifica se o HRESULT especificado não foi bem-sucedido e retorna o HRESULT que foi passado para a macro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_THROWS(operação, exceção, [mensagem opcional]) Verifica se a operação especificada gera o tipo de exceção fornecido. Também registra uma mensagem personalizada, se fornecida.
VERIFY_NO_THROW(operação, [mensagem opcional]) Verifica se a operação especificada não gera uma exceção. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_SUCCEEDED(win32Result, [mensagem opcional]) Verifica se o resultado do Win32 especificado foi bem-sucedido. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_SUCCEEDED_RETURN(win32Result, [mensagem opcional]) Verifica se o resultado do Win32 especificado foi bem-sucedido e retorna o LONG que foi passado para a macro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_FAILED(win32Result, [mensagem opcional]) Verifica se o resultado do Win32 especificado falhou. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_FAILED_RETURN(win32Result, [mensagem opcional]) Verifica se o resultado do Win32 especificado falhou e retorna o LONG que foi passado para a macro. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_BOOL_SUCCEEDED(win32Bool, [mensagem opcional]) Verifica se o WIN32 BOOL especificado foi bem-sucedido (!= FALSE). Registrará o resultado de GetLastError() se a verificação falhar. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_BOOL_SUCCEEDED_RETURN(win32Bool, [mensagem opcional]) Verifica se o WIN32 BOOL especificado foi bem-sucedido (!= FALSE) e retorna o BOOL que foi passado para a macro. Registrará o resultado de GetLastError() se a verificação falhar. Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_BOOL_FAILED(win32Bool, [mensagem opcional]) Verifica se o WIN32 BOOL especificado falhou (== FALSE). Não registra o resultado de GetLastError(). Também registra uma mensagem personalizada, se fornecida.
VERIFY_WIN32_BOOL_FAILED_RETURN(win32Bool, [mensagem opcional]) Verifica se o WIN32 BOOL especificado falhou (== FALSE) e retorna o BOOL que foi passado para a macro. Não registra o resultado de GetLastError(). Também registra uma mensagem personalizada, se fornecida.

Uso de verificação baseado em exceção

Se o código-fonte for compilado com exceções do C++ habilitadas (especificando a opção de linha de comando "/EHsc" ou a macro "USE_NATIVE_EH=1" em um arquivo de fontes), as macros Verify terão como padrão registrar um erro em caso de falha, seguido por gerar uma exceção C++ nativa. A exceção gerada é um WEX::TestExecution::VerifyFailureException. Você não precisa capturar essa exceção – a estrutura TAEF a capturará para você e passará para o próximo caso de teste.

Opcionalmente, se você quiser executar uma série de verificações em uma linha em vez de ter a anulação do teste na primeira falha de verificação, poderá usar a classe DisableVerifyExceptions . O tempo de vida do objeto controla a quantidade de tempo que as exceções estão desabilitadas.

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

No exemplo acima, as exceções são desabilitadas somente dentro do bloco "se (NULL != m_key)" e, se a primeira chamada de verificação falhar, a segunda chamada de verificação ainda será feita.

A classe DisableVerifyExceptions é ref-counted e também funciona por thread.

Uso de verificação não baseado em exceção

Se o código-fonte não for compilado com exceções do C++ habilitadas, as macros Verificar não gerarão um C++ nativo quando as verificações falharem. Além disso, se o código-fonte for compilado com exceções do C++ habilitadas, mas você quiser desabilitar Verificar exceções, basta #define NO_VERIFY_EXCEPTIONS antes de incluir "WexTestClass.h".

Nesse modelo, você deve executar uma série de instruções aninhadas se para controlar o fluxo do seu caso de teste, em vez de depender de exceções C++.

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

Verificar configurações de saída

Se você quiser personalizar a saída produzida pelas APIs de Verificação, poderá usar a classe SetVerifyOutput . O tempo de vida do objeto controla a quantidade de tempo que as configurações de saída são definidas. A classe SetVerifyOutput é ref-counted e funciona por thread.

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

No exemplo acima, as configurações especificadas pertencem apenas a chamadas feitas dentro do bloco "if (NULL != m_key)" e somente a chamada de verificação que falhar será registrada. No entanto, a terceira chamada de verificação será registrada mesmo que tenha êxito. Isso ocorre devido ao fato de que a classe SetVerifyOutput saiu do escopo.

Existem as seguintes opções para definir a saída de verificação:

VerifyOutputSettings::LogOnlyFailures
Somente as chamadas de verificação com falha serão registradas; todas as chamadas bem-sucedidas são ignoradas.

VerifyOutputSettings::LogFailuresAsBlocked
Registre todas as falhas como bloqueadas em vez de registrar um erro em log.

VerifyOutputSettings::LogFailuresAsWarnings
Registre todas as falhas como avisos em vez de registrar um erro em log.

VerifyOutputSettings::LogValuesOnSuccess
Registre os valores dos parâmetros passados, mesmo quando a chamada Verificar for bem-sucedida.

Verifique se as configurações de saída podem ser OR'd juntas para habilitar várias configurações:

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

Fornecendo saída de valor para tipos personalizados

A estrutura de Verificação do C++ fornece a capacidade de gerar uma saída detalhada para qualquer tipo personalizado. Para fazer isso, é necessário implementar uma especialização do modelo de classe WEX::TestExecution::VerifyOutputTraits .

A especialização do modelo de classe WEX::TestExecution::VerifyOutputTraits deve existir no namespace WEX::TestExecution . Espera-se também que ele forneça um método estático público chamado ToString, que usa uma referência à sua classe e retorna um WEX::Common::NoThrowString contendo uma representação de cadeia de caracteres de seu valor.

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

Fornecendo comparadores para tipos personalizados

A estrutura verificar C++ fornece a capacidade de definir comparadores para tipos personalizados que não implementam sobrecargas de operador correspondentes (operator=, operator< etc). Para fazer isso, é necessário implementar uma especialização do modelo de classe WEX::TestExecution::VerifyCompareTraits .

A especialização do modelo de classe WEX::TestExecution::VerifyCompareTraits deve existir no namespace WEX::TestExecution . Espera-se também fornecer métodos estáticos públicos chamados AreEqual, AreSame, IsLessThan, IsGreaterThan e 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;
            }
        };
    }}

Usando Verificar de C #

O uso de Verificação de C# é semelhante ao de C++. No entanto, ele é fornecido por meio do WEX. Classe TestExecution.Verify , que está localizada em Te.Managed.dll.

Os seguintes métodos Verify estão disponíveis para testes em C#:

Macro Funcionalidade
AreEqual(object expected, object actual) Verifica se dois objetos especificados são iguais.
AreEqual(object expected, object actual, string message) Verifica se dois objetos especificados são iguais; registra uma mensagem personalizada sobre êxito ou falha na verificação.
AreEqual<T>(T esperado, T real) Verifica se dois objetos especificados são iguais.
AreEqual<T>(T esperado, T real, mensagem de cadeia de caracteres) Verifica se dois objetos especificados são iguais; registra uma mensagem personalizada sobre êxito ou falha na verificação.
AreNotEqual(object expected, object actual) Verifica se dois objetos especificados não são iguais.
AreNotEqual(object expected, object actual, string message) Verifica se dois objetos especificados não são iguais; registra uma mensagem personalizada sobre êxito ou falha na verificação.
AreNotEqual<T>(T esperado, T real) Verifica se dois objetos especificados não são iguais.
AreNotEqual<T>(T esperado, T real, mensagem de cadeia de caracteres) Verifica se dois objetos especificados não são iguais; registra uma mensagem personalizada sobre êxito ou falha na verificação.
AreSame(object expected, object actual) Verifica se os dois parâmetros especificados se referem ao mesmo objeto.
AreSame(object expected, object actual, string message) Verifica se os dois parâmetros especificados se referem ao mesmo objeto; registra uma mensagem personalizada sobre êxito ou falha na verificação.
AreNotSame(object expected, object actual) Verifica se os dois parâmetros especificados não se referem ao mesmo objeto.
AreNotSame(object expected, object actual, string message) Verifica se os dois parâmetros especificados não se referem ao mesmo objeto; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess) Verifica se o primeiro parâmetro é maior que o segundo parâmetro.
IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, string message) Verifica se o primeiro parâmetro é maior que o segundo parâmetro; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess) Verifica se o primeiro parâmetro é maior ou igual ao segundo parâmetro.
IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, string message) Verifica se o primeiro parâmetro é maior ou igual ao segundo parâmetro; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsLessThan(IComparable expectedLess, IComparable expectedGreater) Verifica se o primeiro parâmetro é menor que o segundo parâmetro.
IsLessThan(IComparable expectedLess, IComparable expectedGreater, string message) Verifica se o primeiro parâmetro é menor que o segundo parâmetro; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater) Verifica se o primeiro parâmetro é menor ou igual ao segundo parâmetro.
IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, string message) Verifica se o primeiro parâmetro é menor ou igual ao segundo parâmetro; registra uma mensagem personalizada sobre êxito ou falha na verificação.
Fail(string message) Falha sem verificar nenhuma condição.
IsTrue(condição bool) Verifica se a condição especificada é verdadeira.
IsTrue(bool condition, string message) Verifica se a condição especificada é verdadeira; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsFalse(condição bool) Verifica se a condição especificada é falsa.
IsFalse(condição bool, mensagem de cadeia de caracteres) Verifica se a condição especificada é falsa; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsNull(object obj) Verifica se o parâmetro especificado é NULL.
IsNull(object obj, string message) Verifica se o parâmetro especificado é NULL; registra uma mensagem personalizada sobre êxito ou falha na verificação.
IsNotNull(object obj) Verifica se o parâmetro especificado não é NULL.
IsNotNull(object obj, string message) Verifica se o parâmetro especificado não é NULL; registra uma mensagem personalizada sobre êxito ou falha na verificação.
<Lança a operação T>(VerifyOperation) Verifica se a operação especificada gera o tipo de exceção fornecido. Também retorna a exceção para inspeção adicional.
Lança T>(operação VerifyOperation, mensagem de cadeia de caracteres<) Verifica se a operação especificada gera o tipo de exceção fornecido; registra uma mensagem personalizada em caso de êxito ou falha na verificação. Também retorna a exceção para inspeção adicional.
NoThrow(operação VerifyOperation) Verifica se a operação especificada não gera uma exceção.
NoThrow(Operação VerifyOperation, mensagem de cadeia de caracteres) Verifica se a operação especificada não gera uma exceção; registra uma mensagem personalizada em caso de êxito ou falha na verificação.

Uso de verificação baseado em exceção

Quando ocorrem falhas de verificação em casos de teste em C#, um erro é gravado no agente e em um WEX. TestExecution.VerifyFailureException é gerado. Assim como no modelo C++ nativo, você não precisa se preocupar em capturar essas exceções. A estrutura TAEF a capturará para você e passará para o próximo caso de teste.

Opcionalmente, se você quiser executar uma série de verificações em uma linha em vez de ter a anulação do teste na primeira falha de verificação, poderá usar a classe DisableVerifyExceptions . O tempo de vida do objeto controla a quantidade de tempo que as exceções estão desabilitadas. A classe DisableVerifyExceptions é contada novamente e funciona por thread.

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

No exemplo acima, se a primeira chamada de verificação falhar, a segunda chamada de verificação ainda será feita.

Como alternativa, você pode obter o mesmo resultado definindo Verify.DisableVerifyExceptions = true antes das operações Verify, como o exemplo mostrado abaixo.

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

Observe que, embora essa opção esteja disponível, declarar DisableVerifyExeptions como um objeto em um bloco using ainda é a opção recomendada.

Se você quiser parar no depurador quando ocorrer um erro de verificação, abra a caixa de diálogo exceções (Ctrl+Alt+E), clique em Adicionar, escolha "Exceções do Common Language Runtime" na lista suspensa e coloque "WEX. TestExecution.VerifyFailureException" no campo Nome.

Verificar configurações de saída

Se você quiser personalizar a saída produzida pelas APIs de Verificação, poderá usar a classe SetVerifyOutput . O tempo de vida do objeto controla a quantidade de tempo que as configurações de saída são definidas. A classe SetVerifyOutput é contada novamente e funciona por thread.

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

No exemplo acima, somente a segunda chamada de verificação deve ser registrada, pois é a única chamada que falha dentro do bloco using. No entanto, a terceira chamada de verificação será registrada mesmo que tenha êxito. Isso ocorre devido ao fato de que a classe SetVerifyOutput saiu do escopo.

Como alternativa, você pode obter o mesmo resultado definindo Verify.OutputSettings = VerifyOutputSettings.LogOnlyFailures antes das operações Verify, como o exemplo mostrado abaixo.

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

Observe que, embora essa opção esteja disponível, declarar SetVerifyOutput como um objeto em um bloco using ainda é a opção recomendada.

Existem as seguintes opções para definir a saída de verificação:

VerifyOutputSettings.LogOnlyFailures
Somente as chamadas de verificação com falha serão registradas; todas as chamadas bem-sucedidas são ignoradas.

VerifyOutputSettings.LogFailuresAsBlocked
Registre todas as falhas como bloqueadas em vez de registrar um erro em log.

VerifyOutputSettings.LogFailuresAsWarnings
Registre todas as falhas como avisos em vez de registrar um erro em log.

Verifique se as configurações de saída podem ser OR'd juntas para habilitar várias configurações:

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

Usando Verificar do Script

A API De verificação também é exibida para linguagens de script, seguindo os mesmos padrões de uso que C++ e C#.

Instalação

Ao usar a API de verificação com script de dentro de um método de teste TAEF, nenhuma instalação é necessária – as API necessárias são registradas usando 'COM gratuito de registro'. Para usar a API com script de fora de um método de teste TAEF (fora do TAEF ou em um processo filho), basta registrar o binário Te.Common.dll usando regsvr32 de um prompt de comando com privilégios elevados; por exemplo:

regsvr32 Te.Common.dll

Ao implantar o TAEF usando um arquivo de implantação para execução de laboratório, Te.Common.dll é registrado automaticamente.

Uso

As APIs de Verificação com script são exibidas por meio do TE. Classe COM Common.Verify – basta instanciar essa classe e chamar métodos nela – a classe Verify funcionará automaticamente com WEXLogger para gravar verificações de passagem e falha no log.

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

Este exemplo define uma classe de teste de script TAEF com um único método 'HelloWorld'. A linha 6 usa o elemento 'object' para definir a variável Verify no escopo global. A linha 8 usa o elemento 'reference' para incluir todas as constantes da biblioteca de tipos especificada (nesse caso, a biblioteca de tipos do Te.Common.dll) no escopo global do script; nesse caso, ele adiciona as constantes 'VerifySettings'. As linhas 16 e 17 mostram simplesmente o uso das API de Verificação. Quando executado, o exemplo gerará a seguinte saída:

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 de verificação com script

Os métodos para validação na API de Verificação com script são os seguintes:

Método Funcionalidade
bool Verify.AreEqual(expected, actual, [optional message]) Verifica se os dois valores são iguais. Se a configuração 'VerifySettings_CoerceTypes' estiver habilitada, esse método usará a definição de igualdade do JScript, se a configuração 'VerifySettings_CoerceTypes' não estiver habilitada, o método usará a definição de identidade JScript. 'VerifySettings_CoerceTypes' está ativado por padrão.
bool Verify.AreNotEqual(expected, actual, [optional message]) Verifica se os dois valores não são iguais. Se a configuração 'VerifySettings_CoerceTypes' estiver habilitada, esse método usará a definição de igualdade do JScript, se a configuração 'VerifySettings_CoerceTypes' não estiver habilitada, o método usará a definição de identidade JScript. 'VerifySettings_CoerceTypes' está ativado por padrão.
bool Verify.IsGreaterThan(expectedGreater, expectedLess, [optional message]) Verifica se o primeiro valor é maior que o segundo.
bool Verify.IsGreaterThanOrEqual(expectedGreater, expectedLess, [optional message]) Verifica se o primeiro valor é maior ou igual ao segundo.
bool Verify.IsLessThan(expectedLess, expectedGreater, [optional message]) Verifica se o primeiro valor é menor que o segundo.
bool Verify.IsLessThanOrEqual(expectedLess, expectedGreater, [optional message]) Verifica se o primeiro valor é menor ou igual ao segundo.
bool Verify.AreSame(expected, actual, [optional message]) Verifica se os valores são os mesmos.
bool Verify.AreNotSame(expected, actual, [optional message]) Verifica se os valores não são os mesmos.
bool Verify.Fail([optional message]) Falha sem verificar as condições.
bool Verify.IsTrue(expression, [optional message]) Verifica se a expressão fornecida é avaliada como true.
bool Verify.IsFalse(expression, [optional message]) Verifica se a expressão fornecida é avaliada como false.
bool Verify.IsNull(expected, [optional message]) Verifica se o valor fornecido é 'null'.
bool Verify.IsNotNull(expected, [optional message]) Verifica se o valor fornecido não é 'nulo'.
bool Verify.Throws(function, [optional message]) Verifica se a função fornecida gera e a exceção.
bool Verify.NoThrow(function, [optional message]) Verifica se a função fornecida não gera e a exceção.

Há dois métodos na classe Verify para controlar as configurações:

Método Funcionalidade
objeto Verify.EnableSettings(settings) O sinalizador de configuração ou sinalizadores especificados será habilitado.
objeto Verify.DisableSettings(settings) O sinalizador de configuração ou os sinalizadores especificados serão desabilitados.

O valor de configurações passado para os métodos Verify.EnableSettings ou Verify.DisableSettings pode ser qualquer um dos seguintes valores:

VerifySettings_LogOnlyFailures = 0x01
Somente falhas são registradas – não há saída em chamadas De verificação bem-sucedidas.

VerifySettings_LogFailuresAsBlocked = 0x02
As falhas são registradas como 'Bloqueadas', em vez do padrão 'Error'.

VerifySettings_LogFailuresAsWarnings = 0x04
As falhas são registradas como 'Aviso', em vez do padrão 'Error'.

VerifySettings_LogValuesOnSuccess = 0x08
Os valores de parâmetros a serem verificados são gravados como parte da mensagem Verificar log. Isso está ativado por padrão.

VerifySettings_CoerceTypes = 0x1000
Os valores passados para os métodos Verify serão coagidos seguindo as regras de coerção JScript. Isso está ativado por padrão.

VerifySettings_DisableExceptions = 0x2000
Exceções não serão geradas quando uma validação falhar.

Verificar configurações

A API De verificação fornece configurações para definir seu comportamento. Os métodos 'EnableSettings' e 'DisableSettings' podem ser usados para habilitar ou desabilitar configurações específicas que a classe Verify mantém. Os métodos tomam uma ou mais configurações para habilitar ou desabilitar.

    Verify.EnableSettings(VerifySettings_LogOnlyFailures);

Para habilitar ou desabilitar várias configurações em uma chamada, você pode incluir vários sinalizadores 'VerifySettings':

    Verify.EnableSettings(VerifySettings_LogOnlyFailures | VerifySettings_DisableExceptions);

Os métodos EnableSettings e DisableSettings retornam um objeto que pode ser usado para restaurar as configurações originais, permitindo que as configurações sejam habilitadas ou desabilitadas para um determinado escopo;

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

Neste exemplo, o método Verify.EnableSettings é passado como 'VerifySettings_LogOnlyFailures', que será incorporado com as configurações que já estão presentes no objeto Verify. Uma chamada Verificar é feita em um bloco try-finally, para que, durante o bloco finalmente, o objeto 'guard' possa ser usado para restaurar as configurações originais.

Uso de verificação baseado em exceção

Por padrão, os métodos Verify gerarão uma exceção quando uma verificação falhar. Ao executar em TAEF se a exceção for descartada do método de teste, o teste falhará. Por exemplo:

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   }

Neste exemplo, a segunda chamada Verificar nunca será feita, pois a primeira gerará uma exceção e falhará no teste. O suporte às configurações na API de Verificação pode ser usado para alterar esse comportamento, de modo que as verificações com falha não sejam geradas, o que permitiria que chamadas de Verificação subsequentes fossem feitas. Isso é particularmente útil para verificar um conjunto de parâmetros e garantir que todas as verificações sejam gravadas.

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   }

Como as exceções foram desabilitadas, ambas as verificações serão gravadas no log.

Usando a API de verificação com script fora do TAEF

A API de Verificação com script pode ser usada fora do TAEF. Verifique se o Te.Common.dll está registrado, conforme destacado na seção Instalação, e crie o "TE" simples. Classe 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");

O código anterior gerará a saída do console a seguir quando executado por meio de 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

O 'WEX. A API logger.Log' pode ser usada para configurar o Agente WEX conforme necessário (por exemplo, como um processo filho) e a API de Verificação com script aproveitará essa configuração.