Compartilhar via


WexLogger

O WexLogger fornece uma API consistente para registro em log que abrange código nativo, código gerenciado e script. Ele também escalona da execução de Testes Unitários em um prompt de comando até os testes de estresse de longa duração.

Fazer logon por meio da Estrutura de Verificação

Most logging within a test case should be performed via the Verify framework. Isso garantirá que os testes sejam criados de forma mais clara, sequencial e legível para humanos. No entanto, em alguns casos, os autores de teste descobrirão que precisam de um controle mais granular em torno do que é gravado nos logs: daí a necessidade da API wexLogger.

Registro em log no TAEF

Para casos de teste em execução no TAEF, não há nenhuma inicialização de logger necessária pelo autor do teste. Você pode começar imediatamente a usar a API de Log exposta ao idioma no qual você está criando seus testes.

No código C++ nativo, ele terá esta aparência:

using namespace WEX::Logging;
using namespace WEX::Common;
Log::Comment(L"Rendering to the BufferView");
Log::Comment(L"Render succeeded");

Log::Comment(String().Format(L"Look, a number! %d", aNumber));

#define LOG_OUTPUT(fmt, ...) Log::Comment(String().Format(fmt, __VA_ARGS__))
LOG_OUTPUT(L"Look, a number! %d", aNumber);

No código gerenciado, ele terá esta aparência:

using WEX.Logging.Interop;
Log.Comment("Rendering to the BufferView");
Log.Comment("Render succeeded");

No JScript, ele terá esta aparência:

var log = new ActiveXObject("WEX.Logger.Log");
log.Comment("Rendering to the BufferView");
log.Comment("Render succeeded");

Registro fora do TAEF

Na maioria das vezes, a inicialização e a conclusão do registro serão realizadas pelo TAEF, de forma que o WexLogger estará pronto para uso durante toda a duração do caso de teste, conforme indicado acima, e irá finalizar corretamente. However, if a client would like to use the WexLogger outside TAEF, they will be responsible for manually calling LogController::InitializeLogging() and LogController::FinalizeLogging(). Esse requisito existe apenas para código nativo e gerenciado; os scripts não têm esse requisito adicional. Consulte a tabela Métodos LogController Estáticos abaixo para obter mais informações sobre a API LogController.

Consulte a seção Gerando Logs do WTT para obter informações sobre como gerar logs WTT fora do TAEF.

WexLogger API

Aqui está a lista de métodos nativos do Log do C++ disponíveis.

Há versões equivalentes disponíveis para código gerenciado e script.

Métodos de log C++ nativos Functionality
Assert(const wchar_t* pszAssert) Logar uma asserção de teste.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext) Registre uma asserção de teste com contexto.
Assert(const wchar_t* pszAssert, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre uma declaração de teste com informações de arquivo, função e linha.
Assert(const wchar_t* pszAssert, const wchar_t* pszContexto, const wchar_t* pszArquivo, const wchar_t* pszFunção, int linha) Registre uma declaração de teste, com contexto e também informações de arquivo, função e linha.
Bug(const wchar_t* pszBugDatabase, int bugId) Registre um número de bug conhecido.
Bug(const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) Registre um número de bug conhecido, com contexto.
Comment(const wchar_t* pszComment) Registre um comentário de teste.
Comment(const wchar_t* pszComment, const wchar_t* pszContext) Registrar em log um comentário de teste, com contexto
EndGroup(const wchar_t* pszGroupName) Registre o fim de um grupo de testes ou de um teste específico.
EndGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registre o fim de um grupo de testes ou de um teste específico com contexto.
Error(const wchar_t* pszError) Registre um erro de teste.
Error(const wchar_t* pszError, const wchar_t* pszContext) Registre um erro de teste com contexto.
Error(const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um erro de teste com informações de arquivo, função e linha.
Error(const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um erro de teste, com contexto e também informações de arquivo, função e linha.
File(const wchar_t* pszFileName) Registre um arquivo de teste a ser armazenado. Os arquivos são salvos em <WTTRunWorkingDir>\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou <CurrentDirectory\>WexLogFileOutput.
File(const wchar_t* pszFileName, const wchar_t* pszContext) Registre um arquivo de teste a ser salvo, com contexto. Os arquivos são salvos em <WTTRunWorkingDir>\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou <CurrentDirectory\>WexLogFileOutput.
Property(const wchar_t* pszName, const wchar_t* pszValue) Registre um par de propriedades nome/valor. O valor pode estar no formato xml.
Property(const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) Registre um par de propriedades nome/valor, com contexto. O valor pode estar no formato xml.
Result(TestResults::Result testResult) Registre um resultado de teste.
Result(TestResults::Result testResult, const wchar_t* pszComment) Registre um resultado de teste com um comentário associado.
Result(TestResults::Result testResult, const wchar_t* pszComment, const wchar_t* pszContext) Registre um resultado de teste com um comentário associado, com contexto.
StartGroup(const wchar_t* pszGroupName) Registre o início de um grupo de testes ou de um teste específico.
StartGroup(const wchar_t* pszGroupName, TestResults::Result defaultTestResult) Registre o início de um grupo de testes ou de um teste específico; também define o resultado do teste padrão.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registre o início de um grupo de testes ou de um teste específico com contexto.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext, TestResults::Result defaultTestResult) Registre o início de um grupo de testes ou de um teste específico; também define o resultado do teste padrão.
Warning(const wchar_t* pszWarning) Registrar um aviso de teste em log.
Alerta(const wchar_t* pszAviso, const wchar_t* pszContexto) Registre um aviso de teste com contexto.
Warning(const wchar_t* pszWarning, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um aviso de teste com informações de arquivo, função e linha.
Warning(const wchar_t* pszWarning, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um aviso de teste, com contexto e também informações de arquivo, função e linha.
Xml(const wchar_t* pszXml) Registrar dados XML. Nenhuma verificação é feita para verificar se ela está bem formada.
Xml(const wchar_t* pszXml, const wchar_t* pszContext) Registro de dados XML, com contexto. Nenhuma verificação é feita para verificar se ela está bem formada.
MiniDump() Registre o mini dump do processo atual.

Note: "Context" is an extra string that you can optionally provide with a WexLogger API call to provide more context or detail. For example, you may choose to always pass in "ImageComparator" as your context when making any WexLogger API calls from your ImageComparator class methods.

Here are the possible valid values for the native C++ TestResults::Result enumeration. Há versões equivalentes disponíveis para código gerenciado e script.

Enumeração Native C++ TestResults::Result Functionality
Passed O teste foi aprovado
NotRun O teste não foi executado
Skipped O teste foi ignorado
Blocked O teste foi bloqueado
Failed Falha no teste

Aqui está a lista de métodos nativos do LogController C++ disponíveis:

Métodos nativos do LogController do C++ Functionality
STATIC HRESULT InitializeLogging() Inicializar a funcionalidade de log.
static HRESULT InitializeLogging(WexLoggerErrorCallback pfnErrorCallback) Inicialize a funcionalidade de log e especifique a função WexLoggerErrorCallback que você deseja usar para ser notificado/a de erros internos do logger.
STATIC HRESULT InitializeLogging(const wchar_t* pszLogName) Inicialize a funcionalidade de log e especifique o nome do arquivo de log que você deseja usar. Note: The log name is only taken into account if WttLogging is enabled.
static HRESULT InitializeLogging(const wchar_t* pszLogName, WexLoggerErrorCallback pfnErrorCallback) Inicialize a funcionalidade de registro em log, especifique o nome do arquivo de log que você gostaria de usar e a função WexLoggerErrorCallback que deve ser usada para ser notificado sobre erros internos do registrador. Note: The log name is only taken into account if WttLogging is enabled.
static bool IsInitialized() Retorna se o LogController foi inicializado ou não para esse processo.
static const unsigned short* GetLogName() Retorna o nome especificado para o log na chamada InitializeLogging (se houver).
HRESULT FinalizeLogging estático() Concluir a funcionalidade de registro em log.

Note: See the C++ Error Handling section below for more information on the WexLoggerErrorCallback mechanism and how to use it outside the TAEF framework.

Note: It is only necessary to call InitializeLogging/FinalizeLogging when using the WexLogger outside the TAEF framework, as TAEF already handles logging initialization/completion.

Note: It is not necessary to initialize/complete logging functionality when using the WexLogger from script.

Aqui está a lista de métodos RemoteLogContoller C++ nativos disponíveis:

Métodos Nativos do RemoteLogController em C++ Functionality
STATIC HRESULT GenerateConnectionData(WEX::Common::NoThrowString&connectionData) Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho se conecte de volta ao processo pai.
static HRESULT GenerateConnectionData(const wchar_t* pszMachineName, WEX::Common::NoThrowString&connectionData) Usado ao iniciar subprocessos em um computador remoto. Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho se conecte de volta ao processo pai.
STATIC HRESULT InitializeLogging(WEX::Common::NoThrowString connectionData) Inicializa a funcionalidade de registro em log dentro do processo pai para que o processo filho possa fazer logon nele.

Note: See the Remote Logging From Child Processes section below for more information on remote logging.

Aqui está a lista de métodos de log gerenciados disponíveis.

Métodos de log gerenciado Functionality
Assert(provedor IFormatProvider, formato de cadeia de caracteres, objeto params[] args) Registre uma declaração de teste usando um provedor de informações de formatação específico à cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Assert(provedor IFormatProvider, formato de cadeia de caracteres, objeto params[] args) Registre uma declaração de teste usando um provedor de informações de formatação específico à cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Assert(string message) Logar uma asserção de teste.
Assert(formato de cadeia de caracteres, objeto arg0) Registre uma declaração de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Assert(string format, params object[] args) Registre uma declaração de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos a serem formatados.
Assert(string message, string context) Registre uma asserção de teste com contexto.
Assert(string mensagem, string arquivo, string função, int linha) Registre uma asserção de teste e também informações de arquivo, função e linha.
Assert(string message, string context, string file, string function, int line) Registre uma declaração de teste, com contexto e também informações de arquivo, função e linha.
Bug(string bugDatabase, int bugId) Registre um número de bug conhecido.
Bug(string bugDatabase, int bugId, contexto de cadeia de caracteres) Registre um número de bug conhecido, com contexto.
Comment(provedor IFormatProvider, formato de cadeia de caracteres, objeto params[] args) Registre um comentário de teste utilizando um provedor de informações de formatação específico para a cultura, uma string de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Comment(string message) Registrar um comentário de teste no log
Comment(string format, object arg0) Registre um comentário de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Comment(string format, params object[] args) Registre um comentário de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Comment(string message, string context) Registrar em log um comentário de teste, com contexto
EndGroup(string groupName) Registre o fim de um grupo de testes ou de um teste específico.
EndGroup(string groupName, contexto de cadeia de caracteres) Registre o fim de um grupo de testes ou de um teste específico com contexto.
Error(provedor IFormatProvider, formato de cadeia de caracteres, objeto params[] args) Registre um erro de teste usando um provedor de informações de formatação específico à cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Error(string message) Registre um erro de teste.
Error(string format, object arg0) Registre um erro de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Error(string message, string context) Registre um erro de teste com contexto.
Error(provedor IFormatProvider, formato de cadeia de caracteres, objeto params[] args) Registre um erro de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Erro(string mensagem, string arquivo, string função, int linha) Registre um erro de teste com informações de arquivo, função e linha.
Error(string message, string context, string file, string function, int line) Registre um erro de teste, com contexto e também informações de arquivo, função e linha.
File(string fileName) Registre um arquivo de teste a ser armazenado. Os arquivos são salvos em WTTRunWorkingDir\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou CurrentDirectory\WexLogFileOutput.
File(string fileName, string context) Registre um arquivo de teste a ser salvo, com contexto. Os arquivos são salvos em WTTRunWorkingDir\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou CurrentDirectory\WexLogFileOutput.
MiniDump() Registre o mini dump do processo atual.
Propriedade(nome da cadeia de caracteres, valor da cadeia de caracteres) Registre um par de propriedades nome/valor. O valor pode estar no formato xml.
Propriedade(nome da cadeia de caracteres, valor da cadeia de caracteres, contexto de cadeia de caracteres) Registre um par de propriedades nome/valor, com contexto. O valor pode estar no formato xml.
Result(TestResult testResult) Registre um resultado de teste.
Resultado(TestResult testResult, comentário de cadeia de caracteres) Registre um resultado de teste com um comentário associado.
Resultado(TestResult testResult, comentário de cadeia de caracteres, contexto de cadeia de caracteres) Registre um resultado de teste com um comentário associado, com contexto.
StartGroup(string groupName) Registre o início de um grupo de testes ou de um teste específico.
StartGroup(string groupName, contexto de cadeia de caracteres) Registre o início de um grupo de testes ou de um teste específico com contexto.
Warning(IFormatProvider provider, string format, params object[] args) Registre um aviso de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contenha um ou mais objetos a serem formatados.
Warning(string message) Registrar um aviso de teste em log.
Warning(string format, object arg0) Registre um aviso de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Warning(string format, params object[] args) Registre um aviso de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Aviso(mensagem de cadeia de caracteres, contexto de cadeia de caracteres) Registre um aviso de teste com contexto.
Aviso(string message, string file, string function, int line) Registre um aviso de teste com informações de arquivo, função e linha.
Warning(string message, string context, string file, string function, int line) Registre um aviso de teste, com contexto e também informações de arquivo, função e linha.
Xml(string xmlData) Registrar dados XML. Nenhuma verificação é feita para verificar se ela está bem formada.
Xml(string xmlData, contexto de cadeia de caracteres) Registro de dados XML, com contexto. Nenhuma verificação é feita para verificar se ela está bem formada.

Aqui está a lista de métodos LogContoller gerenciados disponíveis:

Métodos Gerenciados de LogController Functionality
static void InitializeLogging() Inicializar a funcionalidade de log.
static void InitializeLogging(String logName) Inicialize a funcionalidade de log e especifique o nome do arquivo de log que você deseja usar. Note: The log name is only taken into account if WttLogging is enabled.
static bool IsInitialized() Retorna se o LogController foi inicializado ou não para esse processo.
Static String GetLogName() Retorna o nome especificado para o log na chamada InitializeLogging (se houver).
static void FinalizeLogging() Concluir a funcionalidade de registro em log.

Note: See the Managed Code Error and Exception section below for more information on how to handle errors and exceptions when using the managed layer of the WexLogger outside the TAEF framework.

Note: It is only necessary to call InitializeLogging/FinalizeLogging when using the WexLogger outside the TAEF framework, as TAEF already handles logging initialization/completion.

Note: It is not necessary to initialize/complete logging functionality when using the WexLogger from script.

Aqui está a lista de métodos RemoteLogContoller gerenciados disponíveis:

Métodos Gerenciados do RemoteLogController Functionality
Static String GenerateConnectionData() Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho se conecte de volta ao processo pai.
static String GenerateConnectionData(string machineName) Usado ao iniciar subprocessos em um computador remoto. Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho se conecte de volta ao processo pai.
static void InitializeLogging(String connectionData) Inicializa a funcionalidade de registro em log dentro do processo pai para que o processo filho possa fazer logon nele.

Note: See the Remote Logging From Child Processes section below for more information on remote logging.

Registro de log remoto de processos filhos

O WexLogger fornece a capacidade de um ou mais processos filho registrarem informações para um único processo pai, resultando na geração de resultados de teste consolidados em um único arquivo de log.

Os processos filho podem ser executados no mesmo computador que o processo pai ou remotamente em um computador diferente. Para que o registro em log de máquina remota funcione, cabe ao cliente WexLogger adicionar exclusões de firewall TCP para todos os processos filho no computador remoto. No entanto, se os processos filho estiverem em execução no mesmo computador que o pai, nenhuma modificação de firewall será necessária.

As etapas a seguir são necessárias para configurar cada conexão de log remoto:

Parent Process

  1. Call RemoteLogController::GenerateConnectionData() to generate the connection data that must be used by both processes to initiate a logging connection.

    Note: Be sure to check the return value of this call.

        NoThrowString connectionData;
        Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
    
    
  2. Comunique os dados de conexão com o processo filho definindo-os em seu bloco de ambiente ou passando-os como um argumento no prompt de comando. For example:

    Passe como um argumento com nome no prompt de comando do qual o WexLogger entende:
    /wexlogger_connectiondata=[connection data]

    Note: If this option is used, then step 1 in the Child Process section below is not necessary.

    Passe como uma variável de ambiente nomeada que o WexLogger entende:
    [YourAppName_cmd]=/wexlogger_connectiondata=[connection data]

    Note: If this option is used, then step 1 in the Child Process section below is not necessary.

    Passe para o processo em um formato arbitrário (algum outro parâmetro de comando, variável de ambiente etc.)
    Note: If this option is used, then step 1 in the Child Process section below is necessary.

    Note: As a convenience, the value "/wexlogger_connectiondata=" is defined as a constant in both the native and managed RemoteLogControllers:

    • WEX::Logging::c_szWexLoggerRemoteConnectionData, in LogController.h

    • RemoteLogController.WexLoggerRemoteConnectionData, in Wex.Logger.Interop.dll

  3. Iniciar o subprocesso com os dados de conexão

  4. Chame RemoteLogController::InitializeLogging([dados de conexão criados na etapa 1]). This call must be made after the child process is launched, since it will time out if the child does not call LogController::InitializeLogging() in a timely manner.

    Note: Be sure to check the return value of this call.

    // ...launch child process with connection data...
    Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
    
  5. Aguarde a finalização do processo filho, entre outros.

Child Process

  1. If the connection data was not passed to the child process as a named argument at the command prompt that WexLogger understands (see step 2 above), then you must set an environment variable as such:

    [YourAppName_cmd]=/wexlogger_connectiondata=[connection data]

    For example:

    // App name is mytestapp.exe
    ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
    
  2. Call LogController::InitializeLogging() to initialize logging for this process. Internally, this will leverage the environment variable set in step 1 above (or in step 2 of the Parent Process section) to initiate a logging connection back to the parent process.

  3. Log etc; todos os rastreamentos serão enviados de volta para o processo pai.

  4. Call LogController::FinalizeLogging() to finish logging for this process.

Determinando o resultado do teste

Although there is a method provided to explicitly state the intended outcome of a test case (Log::Result()), there is no need for a test case to use this method in most cases.

For example, if a test case does not explicitly call Log::Result(), and does not log an error (via Log::Error()), by default it is considered a passing test case; if it does log an error, it is a failing test case.

However, if a test case does explicitly call Log::Result(TestResults::TestPassed), but also does log an error within the test case, the test will still be counted as a failure since an error occurred within the test.

Dentro da estrutura TAEF, esse comportamento pode ser substituído marcando seu teste com um resultado de teste padrão diferente. Mais informações sobre isso podem ser encontradas no documento "Criando testes TAEF".

This behavior can also be overridden by explicitly calling Log::StartGroup() for your own test groups/test cases, with a default test result of your choice.

Gerando logs do WTT

Three methods exist to generate WTT logs via the WexLogger. All of them require that WttLog.dll is present in the run directory, or in your path.

  • Se você estiver executando no laboratório, com o cliente wtt instalado, os logs do wtt serão gerados automaticamente para você. Isso ocorre devido ao fato de que o WexLogger procura a existência de duas variáveis de ambiente que só devem existir em um ambiente de laboratório: 'WttTaskGuid' e 'WTTRunWorkingDir'. Se ambos existirem, o registro de log wtt será habilitado automaticamente.

  • Se estiver executando o TAEF fora de um ambiente de laboratório, execute o comando /enablewttlogging no prompt de comando para o caso de teste. Example:

    te my.test.dll /enablewttlogging
    
  • Se você estiver consumindo o WexLogger fora da estrutura TAEF e não estiver em execução em um ambiente de laboratório, deverá definir a <variável de ambiente YOUR_PROCESS_NAME>_CMD para conter essa opção antes de chamar LogController::InitializeLogging(). Example:

    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging");
    LogController.InitializeLogging();
    
  • Se você quiser acrescentar a um arquivo de log wtt existente em vez de substituí-lo, especifique também a opção /appendwttlogging além de /enablewttlogging.

    te my.test.dll /enablewttlogging /appendwttlogging
    
    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging /appendwttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging /appendwttlogging");
    LogController.InitializeLogging();
    

Também é possível substituir completamente ou acrescentar à cadeia de caracteres padrão do dispositivo WttLogger especificando uma das seguintes opções de comando:

/WttDeviceString:<nova cadeia de dispositivo>
Substitui completamente o WttDeviceString usado pelo WexLogger quando inicializa o WttLogger.

/WttDeviceStringSuffix:<valor a ser adicionado à string do dispositivo>
Acrescenta o valor especificado ao WttDeviceString padrão usado pelo WexLogger quando inicializa o WttLogger. Ignorado se '/WttDeviceString' também for especificado.

A tabela a seguir lista como os TestResults do WexLogger são mapeados para os resultados do WttLogger:

WexLogger WttLogger
Passed WTT_TESTCASE_RESULT_PASS
NotRun WTT_TESTCASE_RESULT_BLOCKED
Skipped WTT_TESTCASE_RESULT_SKIPPED
Blocked WTT_TESTCASE_RESULT_BLOCKED
Failed WTT_TESTCASE_RESULT_FAIL

Logger Dependencies

The native C++ logger (Wex.Logger.dll) is dependent upon Wex.Common.dll and Wex.Communication.dll.

The managed logger (Wex.Logger.Interop.dll) is dependent upon Wex.Logger.dll, Wex.Common.dll and Wex.Communication.dll.

Additionally, WttLog.dll is required when Wtt Logging is enabled.

Dados de erro adicionais

Caso um erro seja registrado, você poderá permitir que o WexLogger inclua um ou mais dos seguintes itens, além do erro em si:

  • MiniDump
  • ScreenCapture
  • StackTrace
te my.test.dll /minidumponerror
te my.test.dll /screencaptureonerror /stacktraceonerror

Com uma ou mais dessas opções habilitadas, você receberá uma saída extra sempre que Log::Error() for chamado.

Observação: se você estiver consumindo o WexLogger fora da estrutura TAEF, deverá definir a <variável de ambiente YOUR_PROCESS_NAME>_CMD para conter essas opções antes de chamar LogController::InitializeLogging(). Example:

Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();
Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();

Tratamento de erros do C++

In order to shield test case authors from the burden of checking return values for each Log API call, the WexLogger reports unexpected error conditions via the use of an optional callback mechanism; a WexLoggerErrorCallback function. Upon initializaiton of the WexLogger (via LogController::InitializeLogging()), clients may choose to specify a WexLoggerErrorCallback function to call if unexpected error conditions occur within the WexLogger. The WexLoggerErrorCallback function must use the following signature:

void __stdcall MyLoggerErrorCallback(const unsigned short* pszMessage, HRESULT hr);

Um uso comum para a função WexLoggerErrorCallback seria gravar as mensagens de erro no console (se o seu cinto de teste for um aplicativo de console). For example, the TAEF framework is a client of the WexLogger, and implements a WexLoggerErrorCallback which writes red text to the console when WexLogger errors occur.

Compatibilidade do .NET 4.0

Wex.Logger.Interop é compilado como um binário NetFx 2/3/3.5, de modo que ele possa ser carregado nos processos NetFx 2/3/3.5 e NetFx 4. Isso permite que o TAEF execute todos os assemblies gerenciados acima do NetFx 2. If you're using Wex.Logger outside TAEF, then you need to add a config file for your exe to configure the NetFx 4 runtime to load NetFx 2/3/3.5 binaries into it's process. O arquivo de configuração deve conter o seguinte:

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>

Erro de código gerenciado e tratamento de exceções

In order to shield test case authors from the burden of checking return values for each Log API call, the managed layer of the WexLogger reports unexpected error conditions via the use of the LoggerController.WexLoggerError event. You may subscribe to this event at any time by implementing your own WexLoggerErrorEventHandler and using the following familiar syntax for C# event subscription:

LogController.WexLoggerError += new WexLoggerEventHandler(My_WexLoggerErrorHandler);

Aqui está um exemplo de como seu manipulador de eventos pode ser:

static void LogController_WexLoggerError(object sender, WexLoggerErrorEventArgs e)
{
    ConsoleColor originalColor = Console.ForegroundColor;
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("LogController_WexLoggerError: " + e.Message);
    Console.ForegroundColor = originalColor;
}

Additionally, the LogController::InitializeLogging() and LogController::FinalizeLogging() methods themselves throw WexLoggerException in the event of failure. Isso fornece informações detalhadas sobre o erro e também permite anular a execução do teste antes de começar. Os autores de casos de teste nunca precisarão se preocupar em capturar essas exceções – elas devem ser esperadas/tratadas somente durante a inicialização/conclusão do WexLogger.