Unit Test em Stored Procedures (Sql Server) Parte I
Tags: sql
Published: 2020-06-09 03:07:20

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](https://dev-to-uploads.s3.amazonaws.com/i/v8tzzm67nmsz9qvpefq6.gif)

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](https://dev-to-uploads.s3.amazonaws.com/i/9sshbicyjn43hmws3x46.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/y2yc91dp09xew9w0q4ry.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/rv90frcxmylmhb86lb2h.PNG)

2 - Deixe nas opções padrões mesmo (eu não altero): 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yfuis9rz2mq4fcw7rfkn.PNG)

3 - O Visual Studio mostrará o progresso de importação.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ihgo2e6c3o5ujcps9twb.PNG)

4 - E.... *Voilà*! O seu objeto foi importado e aparecerá no Object Explorer abaixo:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4kv76xwchilj6nr1a8i4.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/nbwtk2f3wdnr68u0g47f.png)

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](https://dev-to-uploads.s3.amazonaws.com/i/ansas71gc1sr6i180mgv.PNG)

Nessa mesma tela vamos remover o teste inconclusivo que aparece na parte inferior..
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gmpkr3g94rd0mby9kqo2.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/ywnseky9q87geau16ztb.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/8orh644zxx654uq3wube.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/i/0e84kcn80u9clfqr4n5q.PNG)

E então vamos rodar o nosso teste!!!! 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/d0kq8dy7b70ywxh791td.PNG)

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.