Usar condições de teste em testes de unidade do SQL Server

Em um teste de unidade do SQL Server, um ou mais scripts de teste Transact-SQL são executados. Os resultados podem ser avaliados no script Transact-SQL e THROW ou RAISERROR usados para retornar um erro e falhar no teste ou as condições de teste podem ser definidas no teste para avaliar os resultados. O teste retorna uma instância da classe SqlExecutionResult . A instância dessa classe contém um ou mais Conjuntos de Dados, o tempo de execução e as linhas afetadas pelo script. Todas essas informações são coletadas durante a execução do script. Esses resultados podem ser avaliados usando condições de teste. O SQL Server Data Tools fornece um conjunto de condições de teste predefinidas. Você também pode criar e usar condições personalizadas; consulte Condições de teste personalizadas para testes de unidade do SQL Server.

Condições de teste predefinidas

A tabela a seguir lista as condições de teste predefinidas que você pode adicionar usando o painel Condições de Teste no Designer de Teste de Unidade do SQL Server.

Condição de teste Descrição da condição de teste
Soma de verificação de dados Falhará se a soma de verificação do conjunto de resultados retornado do script Transact-SQL não corresponder à soma de verificação esperada. Para obter mais informações, consulte Especificando uma soma de verificação de dados.

Nota: Essa condição de teste não será recomendada se você estiver retornando dados que variam entre execuções de teste. Por exemplo, se o conjunto de resultados contiver datas ou horas geradas ou contiver colunas de identidade, os testes falharão porque a soma de verificação é diferente em cada execução.
Conjunto de Resultados Vazio Falhará se o conjunto de resultados retornado do script Transact-SQL não estiver vazio.
Tempo de execução Falhará se o script de teste Transact-SQL levar mais tempo do que o esperado para ser executado. O tempo de execução padrão é de 30 segundos.

O tempo de execução se aplica somente ao teste de script de teste, não ao script de pré-teste ou ao script pós-teste.
Esquema esperado Falhará se as colunas e os tipos de dados do conjunto de resultados não corresponderem aos especificados para a condição de teste. Você deve especificar um esquema por meio das propriedades da condição de teste. Para obter mais informações, consulte Especificando um esquema esperado.
Inconclusivo Sempre produz um teste com um resultado inconclusivo. Essa é a condição padrão adicionada a cada teste. Essa condição de teste é incluída para indicar que a verificação de teste não foi implementada. Exclua essa condição de teste do teste depois de adicionar outras condições de teste.
Conjunto de Resultados Não Vazio Falhará se o conjunto de resultados estiver vazio. Você pode usar essa condição de teste ou o EmptyResultSet com a função Transact-SQL @@RAISERROR em seu script de teste para testar se uma atualização funcionou corretamente. Por exemplo, você pode salvar valores de pré-atualização, executar a atualização, comparar valores pós-atualização e gerar um erro se não obtiver os resultados esperados.
Contagem de linhas Falhará se o conjunto de resultados não contiver o número esperado de linhas.
Valor escalar Falhará se um valor específico no conjunto de resultados não for igual ao valor especificado. O valor esperado padrão é nulo.

A condição de teste tempo de execução especifica um limite de tempo sob o qual o script de teste Transact-SQL deve ser executado. Se esse limite de tempo for excedido, o teste falhará. Os resultados do teste também incluem uma estatística de duração, que difere do parâmetro de teste de tempo de execução. A estatística Duração inclui não apenas o tempo de execução, mas também o tempo para se conectar ao banco de dados duas vezes; o tempo para executar quaisquer outros scripts de teste, como o script de pré-teste e o script pós-teste; e o tempo para executar as condições de teste. Portanto, um teste pode ser aprovado mesmo que sua duração seja maior que o tempo de execução.

A Duração relatada não inclui o tempo usado para geração de dados e implantação de esquema porque eles ocorrem antes da execução dos testes. Para exibir a duração do teste, selecione uma execução de teste na janela Resultados do Teste , clique com o botão direito do mouse e escolha Exibir Detalhes dos Resultados do Teste.

Você pode adicionar condições de teste aos testes de unidade do SQL Server usando o painel Condições de Teste do Designer de Teste de Unidade do SQL Server. Para obter mais informações, consulte Como adicionar condições de teste a testes de unidade do SQL Server.

Você também pode editar seu código de método de teste diretamente para adicionar mais funcionalidade. Para obter mais informações, consulte Como abrir um teste de unidade do SQL Server para editar e como gravar um teste de unidade do SQL Server executado no escopo de uma única transação. Por exemplo, você pode adicionar funcionalidade a um método de teste adicionando instruções Assert. Para obter mais informações, consulte Usar declarações de Transact-SQL em testes de unidade do SQL Server.

Falhas esperadas

Você pode criar testes unitários do SQL Server para testar um comportamento que não deveria funcionar. Essas falhas esperadas às vezes são conhecidas como testes negativos. Alguns exemplos incluem:

  • Verifique se um procedimento armazenado que exclui os dados de um cliente falhará se você especificar uma ID de cliente inválida.
  • Verifique se um procedimento armazenado que preenche um pedido falha se o pedido nunca foi feito ou se o pedido já foi preenchido.
  • Verifique se um procedimento armazenado que cancela um pedido não pode cancelar pedidos ou pedidos concluídos que já foram cancelados.

Você pode definir testes de unidade do SQL Server para procedimentos armazenados que geram exceções esperadas. Você pode adicionar um atributo ao método de teste de unidade para indicar quais exceções ou exceções são esperadas. Ao fazer isso, você impede que o teste falhe quando a exceção ocorrer.

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

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

Where:

  • nnnnn é o número da mensagem esperada, por exemplo, 14025
  • x é a gravidade 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 THROW em seu código de banco de dados. Se você especificar MatchFirstError = false, o atributo corresponderá a qualquer um dos SqlErrors na exceção. O comportamento padrão (MatchFirstError = true) é corresponder apenas ao primeiro erro que ocorre.

Para obter um exemplo de como usar 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.

Especificar um checksum de dados

Para exibir o Designer de Teste de Unidade do SQL Server, clique duas vezes no arquivo de código-fonte de teste de unidade no Gerenciador de Soluções.

Depois de adicionar uma condição de teste de Soma de Verificação de Dados ao teste de unidade de banco de dados, você deve configurar a soma de verificação esperada usando o seguinte procedimento:

Especificar uma soma de verificação esperada

  1. Na lista de condições de teste, selecione a condição de soma de verificação de dados para a qual deseja especificar um checksum.

  2. Abra a janela Propriedades pressionando F4. Você também pode abrir o menu Exibir e selecionar Janela Propriedades .

  3. (Opcional) Talvez você queira alterar a propriedade (Name) da condição de teste para ser mais descritiva.

  4. Na propriedade Configuração , selecione o botão procurar (...).

    A caixa de diálogo Configuração para TestConditionName é exibida.

  5. Especifique uma conexão com o banco de dados que você deseja testar. Para obter mais informações, consulte Como criar uma conexão de banco de dados.

  6. Por padrão, o corpo Transact-SQL do teste é exibido no painel de edição. Você pode modificar o código, se necessário, para produzir os resultados esperados. Por exemplo, se o teste tiver código no pré-teste, talvez seja necessário adicionar esse código.

    Importante

    Se você modificar uma condição de soma de verificação para a qual você especificou anteriormente uma soma de verificação, todas as alterações feitas no painel de edição não serão salvas. Você deve fazer essas alterações novamente antes de selecionar Recuperar.

  7. Selecione Recuperar.

    O Transact-SQL é executado na conexão de banco de dados especificada e os resultados aparecem na caixa de diálogo.

  8. Se os resultados corresponderem aos resultados esperados do teste, selecione OK. Caso contrário, modifique o corpo Transact-SQL e repita as etapas 6, 7 e 8 até que os resultados sejam os esperados.

    A coluna Valor da condição de teste exibe o valor da soma de verificação esperada.

Especificar um esquema esperado

Depois de adicionar uma condição de teste de esquema esperado ao teste de unidade do SQL Server, você deve configurar o esquema esperado usando o seguinte procedimento:

Especificar o esquema esperado

  1. Na lista de condições de teste, selecione a condição de teste de Esquema Esperado para a qual você deseja especificar um esquema.

  2. Abra a janela Propriedades pressionando F4. Você também pode abrir o menu Exibir e selecionar a janela Propriedades .

  3. (Opcional) Talvez você queira alterar a propriedade (Name) da condição de teste para ser mais descritiva.

  4. Na propriedade Configuração , selecione o botão procurar (...).

    A caixa de diálogo Configuração para TestConditionName é exibida.

  5. Especifique uma conexão com o banco de dados que você deseja testar. Para obter mais informações, consulte Como criar uma conexão de banco de dados.

  6. Por padrão, o corpo Transact-SQL do teste é exibido no painel de edição. Você pode modificar o código, se necessário, para produzir os resultados esperados. Por exemplo, se o teste tiver código no pré-teste, talvez seja necessário adicionar esse código.

    Importante

    Se você modificar uma condição de esquema esperada para a qual havia especificado anteriormente um esquema, todas as alterações feitas no painel de edição não serão salvas. Você deve fazer essas alterações novamente antes de selecionar Recuperar.

  7. Selecione Recuperar.

    O Transact-SQL é executado na conexão de banco de dados especificada e os resultados aparecem na caixa de diálogo. Como você está verificando o esquema ou a forma do conjunto de resultados e não os valores dos resultados, você não precisa ver nenhum dado nos resultados retornados, desde que as colunas apareçam da maneira que você espera que eles apareçam.

  8. Se os resultados corresponderem aos resultados esperados do teste, selecione OK. Caso contrário, modifique o corpo Transact-SQL e repita as etapas 6, 7 e 8 até que os resultados sejam os esperados.

    A coluna Valor da condição de teste exibe informações sobre o esquema esperado. Por exemplo, ele pode dizer "Esperado: 2 tabelas".

Condições de teste extensíveis

Além das seis condições de teste predefinidas, você pode escrever novas condições de teste por conta própria. Essas condições de teste são exibidas no painel Condições de Teste do Designer de Teste de Unidade do SQL Server. Para obter mais informações, consulte Condições de teste personalizadas para testes de unidade do SQL Server.