Usando asserções Transact-SQL nos testes de unidade do SQL Server

Em um teste de unidade do SQL Server, um script de teste Transact-SQL executa e retorna um resultado. Muitas vezes, os resultados são retornados como um conjunto de resultados. Você pode validar resultados usando condições de teste. Por exemplo, você pode usar uma condição de teste para verificar quantas linhas foram retornadas em um conjunto de resultados específico ou para verificar quanto tempo um teste específico levou para ser executado. Para saber mais sobre as condições de teste, confira Usar as condições de teste em Testes de unidade do SQL Server.

Em vez de usar as condições de teste, você também pode usar as asserções Transact-SQL, que são instruções THROW ou RAISERROR em um script Transact-SQL. Em determinadas circunstâncias, talvez você prefira usar uma asserção Transact-SQL, em vez de uma condição de teste.

Usando asserções Transact-SQL

Considere os seguintes pontos antes de decidir validar dados usando asserções Transact-SQL ou condições de teste.

  • Desempenho. É mais rápido executar uma asserção Transact-SQL no servidor do que mover primeiro dados para um computador cliente e manipulá-los localmente.

  • Familiaridade com a linguagem. Talvez você prefira uma linguagem específica com base na sua experiência atual e, portanto, escolha asserções Transact-SQL ou Visual C# ou condições de teste do Visual Basic.

  • Validação complicada. Em algumas instâncias, você pode criar testes mais complexos no Visual C# ou Visual Basic e validar os testes no cliente.

  • Simplicidade. É geralmente mais simples usar uma condição de teste pré-definida do que escrever o script equivalente no Transact-SQL.

  • Bibliotecas de validação herdadas. Se você já tiver um código que executa a validação, poderá usá-lo em um teste de unidade do SQL Server, em vez de usar condições de teste.

Marcar métodos de teste de unidade com a exceção esperada

Para marcar um método de teste de unidade do SQL Server com as exceções esperadas, adicione o seguinte atributo:

<ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)> _  
[ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)]  

Em que:

  • nnnnn é o número da mensagem esperada; por exemplo, 14025

  • x é o nível de severidade da exceção esperada

  • y é o estado da exceção esperada

Todos os parâmetros não especificados são ignorados. Você passa esses parâmetros para a instrução RAISERROR no código do banco de dados. Se você especificar MatchFirstError = true, o atributo corresponderá a qualquer SqlError na exceção. O comportamento padrão (MatchFirstError = true) é retornar somente o primeiro erro.

Para obter um exemplo de como usar as exceções esperadas e um teste de unidade negativo do SQL Server, consulte Passo a passo: criar e executar um teste de unidade do SQL Server.

A instrução RAISERROR

Observação

Use THROW em vez de RAISERROR. RAISERROR agora foi substituído.

Você pode usar diretamente asserções de Transact-SQL no servidor usando a instrução RAISERROR no script Transact-SQL. Sua sintaxe é:

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

onde:

@ErrorMessage é qualquer mensagem de erro definida pelo usuário. Você pode formatar essa cadeia de caracteres de mensagem semelhante à função printf_s.

@ErrorSeverity é um nível de gravidade definido pelo usuário de 0 a 18.

Observação

Os valores '0' e '10' para o nível de severidade não ocasionam a falha do teste de unidade do SQL Server. Você pode usar qualquer outro valor no intervalo de 0 a 18 para provocar a falha do teste.

@ErrorState é um número inteiro arbitrário de 1 a 127. Você pode usar esse número inteiro para fazer a distinção entre as ocorrências de um único erro gerado em locais diferentes no código.

Para saber mais, confira RAISERROR (Transact-SQL). Confira um exemplo de como usar RAISERROR em um teste de unidade do SQL Server no tópico Como gravar um teste de unidade do SQL Server executado no escopo de uma única transação.

Consulte Também

Criando e definindo testes de unidade do SQL Server
Usar condições de teste nos testes de unidade do SQL Server
Verificar o código do banco de dados usando os testes de unidade do SQL Server
Como: Abrir um teste de unidade do SQL Server a ser editado