Partilhar via


Scripts em testes de unidade do SQL Server

Cada teste de unidade do SQL Server contém uma única ação de pré-teste, ação de teste e ação pós-teste. Cada uma destas ações, por sua vez, contém:

  • Um script Transact-SQL que é executado em um banco de dados.
  • Zero ou mais condições de teste que avaliam os resultados retornados da execução do script.

O script de teste Transact-SQL na ação de teste é o único componente que você deve incluir em cada teste de unidade do SQL Server. Além do script de teste em si, você provavelmente também deseja especificar condições de teste para verificar se o script de teste retornou o valor ou conjunto de valores esperados. A ação de teste exercita ou altera um objeto específico nesse banco de dados e, em seguida, avalia essa alteração.

Para cada ação de teste, você pode incluir uma ação de pré-teste e uma ação de pós-teste. Semelhante à ação de teste, cada ação de pré-teste e cada ação de pós-teste contém um script Transact-SQL e zero ou mais condições de teste. Você pode usar uma ação de pré-teste para certificar-se de que o banco de dados está em um estado que permite que sua ação de teste seja executada e retorne resultados significativos. Por exemplo, você pode usar uma ação de pré-teste para verificar se uma tabela contém dados antes que o script de teste execute uma operação nesses dados.

Depois que a ação de pré-teste prepara o banco de dados e a ação de teste retorna resultados significativos, a ação de pós-teste pode ser usada para retornar o banco de dados ao estado em que estava antes da execução da ação de pré-teste. Ou, em alguns casos, você pode usar a ação pós-teste para validar os resultados da ação de teste. Isso ocorre porque a ação pós-teste pode ter privilégios de banco de dados maiores do que a ação de teste. Para obter mais informações, consulte Visão geral de cadeias de conexão e permissões.

Além dessas três ações, há também dois scripts de teste (conhecidos como scripts comuns), que são executados antes e depois de cada execução de teste de unidade do SQL Server. Como resultado, até cinco scripts de Transact-SQL podem ser executados durante a execução de um único teste de unidade do SQL Server. Somente o script Transact-SQL contido na ação de teste é necessário; Os scripts comuns e os scripts de ação pré-teste e pós-teste são opcionais.

A tabela a seguir fornece uma lista completa de scripts associados a qualquer teste de unidade do SQL Server.

Ação Tipo de script Description
TestInitialize Script comum (inicialização) (Opcional) Este script precede todas as ações de pré-teste e teste no teste unitário. O script TestInitialize é executado antes de cada teste de unidade em uma determinada classe de teste. Este script é executado usando o contexto privilegiado.
Pré-teste Script de teste (Opcional) Este script faz parte do teste de unidade. O script de pré-teste é executado antes da ação de teste dentro de um teste unitário. Este script é executado usando o contexto privilegiado.
Test Script de teste (Obrigatório) Este script faz parte do teste de unidade. Esse script pode, por exemplo, executar um procedimento armazenado que obtém, insere ou atualiza valores de tabela. Este script é executado usando o contexto de execução.
pós-teste Script de teste (Opcional) Este script faz parte do teste de unidade. O script pós-teste é executado após um teste de unidade individual. Este script é executado usando o contexto privilegiado.
TestCleanup Script comum (limpeza) (Opcional) Este script é executado após o teste de unidade. O script TestCleanup é executado após todos os testes de unidade em uma determinada classe de teste. Este script é executado usando o contexto privilegiado.

Para obter mais informações sobre os diferentes contextos de segurança nos quais cada um desses scripts é executado , consulte Visão geral de cadeias de conexão e permissões. Você também pode revisar a seção Permissões de teste de unidade do SQL Server em Permissões necessárias para o SQL Server Data Tools.

Ordem em que os scripts são executados

É importante entender a ordem em que cada script é executado. Embora não seja possível alterar essa ordem, você pode decidir quais scripts deseja executar. A ilustração a seguir inclui a seleção de scripts que você pode usar em uma execução de teste que contém dois testes de unidade do SQL Server e mostra a ordem em que eles são executados:

Diagrama de dois testes de unidade de banco de dados.

Observação

Se a implantação do projeto de banco de dados do SQL Server estiver configurada, essa etapa ocorrerá no início da execução do teste, sob a cadeia de conexão de contexto privilegiado. Para obter mais informações, consulte Como configurar a execução do teste de unidade do SQL Server.

Scripts de inicialização e limpeza

No Designer de Teste de Unidade do SQL Server, os scripts TestInitialize e TestCleanup são chamados de scripts comuns. O exemplo anterior pressupõe que os dois testes de unidade fazem parte da mesma classe de teste. Como resultado, eles compartilham os mesmos scripts TestInitialize e TestCleanup. Para todos os testes de unidade dentro de uma única classe de teste, este é sempre o caso. No entanto, se sua execução de teste contém testes de unidade de classes de teste diferentes, os scripts comuns para a classe de teste associada são executados antes e depois da execução do teste de unidade.

Se você escrever testes de unidade somente usando o Designer de Teste de Unidade do SQL Server, talvez não esteja familiarizado com o conceito de uma classe de teste. Sempre que você cria um teste de unidade abrindo o menu Teste e selecionando Novo Teste, o SQL Server Data Tools gera uma classe de teste. As classes de teste aparecem no Gerenciador de Soluções com o nome de teste que você especificou, seguido por uma .cs extensão ou .vb . Dentro de cada classe de teste, os testes unitários individuais são armazenados como métodos de teste. No entanto, independentemente do número de métodos de teste (ou seja, testes de unidade), cada classe de teste pode ter zero ou até um script de TestInitialize e TestCleanup.

Você pode usar o script TestInitialize para preparar o banco de dados de teste e pode usar o script TestCleanup para retornar o banco de dados de teste a um estado conhecido. Por exemplo, você pode usar TestInitialize para criar um procedimento armazenado auxiliar que você executa posteriormente, no script de teste, para testar um procedimento armazenado diferente.

Scripts de pré-teste e pós-teste

É provável que os scripts associados a ações de pré-teste e pós-teste variem de um teste de unidade para outro. Você pode usar esses scripts para estabelecer alterações incrementais no banco de dados e, em seguida, limpar essas alterações.