DEV Community

Cover image for Unit Test em Stored Procedures (Sql Server) Parte I
Allan Rodrigues
Allan Rodrigues

Posted on

Unit Test em Stored Procedures (Sql Server) Parte I

Atualmente temos acompanhado o mercado e visto muitas vagas de emprego que pedem ao desenvolvedor habilidades em construir testes unitários e conhecimento de ferramentas para aplicar testes front-end.
Porém pouco, ou nem isso, lembramos de criar rotinas para testes em nossas procedures, não é mesmo? Apenas algumas execuções simples e uma conferida rápida no resultado.
Se identificou, né?

Alt Text

Então devido essa realidade que tenho visto nos meus dias de trabalho resolvi começar a aplicar em meu dia-a-dia(sim, eu também não fazia) e compartilhar para quem se interessar em uma forma de realizar testes em suas procedures criadas no SQL Server. E ai meu velho? Vamo lá?

Nesse exemplo eu usei:

  1. Visual Studio Data Tools 2017
  2. SQL Server 2016
  3. Banco de Dados de Estudo: WorldWideImporters

MÃOS NA MASSA!!!!

Primeiro vamos criar nossa procedure que será o objeto de teste. Uma procedure simples que realiza operações matemáticas e retorna um resultado.
Obs: Salve o script da procedure, pois será necessário mais a frente.

Alt Text

Depois da compilação da procedure vamos para o VS Data Tool 2017.
Com o VS aberto criamos um novo projeto, e em templates ou instalados buscamos por SQL Server Database Project.
Em seguida damos um nome ao projeto/solução e OK.

Alt Text

Após criado a solução, vamos em Projeto > Importar > Script (*.sql).
Lembra da procedure que foi criada lá no início? Pois é vamos importar agora para o nosso projeto. Seguindo a sequência de imagens a seguir.

1 - Selecione o arquivo do script .sql que foi salvo em alguma pasta do seu computador:
Alt Text

2 - Deixe nas opções padrões mesmo (eu não altero):
Alt Text

3 - O Visual Studio mostrará o progresso de importação.
Alt Text

4 - E.... Voilà! O seu objeto foi importado e aparecerá no Object Explorer abaixo:
Alt Text

Feito isso, clique com o botão direito em cima do objeto importado e então em "Criar Teste Unitário... (Create Unit Test...)"

Em seguida abrirá uma janela modal para configurar a conexão com o banco de dados, informe o seu servidor, usuário e senha de forma padrão na aba browse e clique em OK.

Assim concluímos mais um passo!!! UFA! Muita coisa, ne? Porém ainda temos um caminho pela frente.. siga firme!
Alt Text

Retomando....
Após criarmos a nossa conexão o Visual Studio nos mostrará uma tela com um script de chamada da procedure de teste, e no combobox superior esquerdo o objeto que está será testado e no combobox da direita nos dá três opções que são executadas na sequência:

Pre-test:(OPCIONAL) Nessa área podemos criar scripts de preparação de ambiente, como por exemplo create, inserts de dados necessários para o funcionamento da rotina.

Test:(OBRIGATÓRIO) Aqui será feito o script de teste mesmo.

Pos-Test:(OPCIONAL) Pode ser usado para limpar os dados utilizados durante o teste.

Alt Text

Nessa mesma tela vamos remover o teste inconclusivo que aparece na parte inferior..
Alt Text

E então vamos criar uma validação de teste bem simples! Apenas pra verificar se a procedure está retornando dados da operação informada.
Pra isso na mesma área onde removemos o teste inconclusivo, vamos incluir uma condição de teste.
Escolha no combobox a opção "Row Count" e então adicione.

Alt Text

Na sequencia, clique em cima da linha e pressione F4 para acessar as propriedades do teste e altere o valor de "ROW COUNT" de 0 para 1 e salve tudo.

Alt Text

Quando salvar tudo da solução, na aba de "Gerenciamento de Teste" irá aparecer o teste nós criamos, como na imagem abaixo:

Alt Text

E então vamos rodar o nosso teste!!!!
Alt Text

PRONTINHO!!
TESTE EXECUTADO COM SUCESSO.

Alteramos os parâmetros para valores válidos e executamos a rotina, parece meio demorado não é? Mas não é não e vale muito a pena, principalmente se você tem que documentar os resultados do teste.
Neste primeiro post de 3, fizemos o caso de sucesso.
No próximo vamos verificar o valor esperado e o último o teste negativo.

Até a próxima meus amigos.

Top comments (0)