• Nenhum resultado encontrado

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

N/A
N/A
Protected

Academic year: 2021

Share "TESTES AUTOMATIZADOS COM JUNITE MOCKITO"

Copied!
6
0
0

Texto

(1)

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

Jaime William Dias12, Dener Barranco1, Douglas Delapria1

1

Universidade Paranaense (Unipar) 2

Universidade Estadual de Maringá (UEM) Paranavaí – PR – Brasil

dener_barranco@hotmail.com, delapria@hotmail.com, jaime@unipar.br

Resumo. Testes é um dos métodos utilizados no desenvolvimento para se obter

qualidade ao software. A automação de testes que veio para agilizar processos, com eficiência na criação e execução do mesmo. O artigo apresenta uma introdução sobre testes automatizados, e qual é a sua importância, com foco em teste unitário, onde abordamos os principais tópicos. Descrevemos sobre os frameworks JUnit e Mockito utilizados em uma aplicação web, para executar o teste de unidade, mostrando todo o processo de execução do teste e resultado que chegamos diante desse experimento aplicando teste unitário com JUnit e Mokito.

1. Introdução

Testes automatizados podem ser considerados pequenos programas ou script de testes, partes de código que com o auxílio de frameworks fazem verificação automáticas sem a necessidade de intervenção humana nas verificações. Normalmente utilizado em casos em que o software tem uma longa vida útil sofrendo mudança constante de versões e até mesmo implementando novas funcionalidades, neste caso de novas funções no software precisa ser testado em conjunto com as demais existente no sistema, para ver se a nova funcionalidade aplicada, não afetou as outras estavam funcionando. A automação se torna primordial para casos onde os testes se repetem, podendo ser executado quantas vezes for preciso de forma pratica e rápida verificando todas as funcionalidades em conjunto, dando grande confiabilidade ao software.

Neste contexto vemos o quanto a automação de testes se torna favorável ao desenvolvimento de software, trazendo benefícios e oferecendo uma maior cobertura a testes de software. Abrangendo teste de unidade que é considerado o teste mais importante a ser realizado no início de um projeto. Executamos este teste em uma aplicação onde vemos sua atuação na prática e vantagens de ser utilizado, com duas

frameworks diferentes para testes automatizados, o JUnit exclusiva para testes unitários

e Mockito para que o teste se torne eficaz.

2.Teste de Unidade

Teste de unidade ou também chamado de Teste Unitário, testa a menor parte do sistema como classes, métodos, interfaces por isso é aplicado na primeira fase de desenvolvimento de um software, sua principal função é reduzir esforços encontrando defeitos mais cedo que o esperado, para que o software depois de pronto possua o mínimo de erros possíveis, consequentemente o custos vai ser bem menor com a

(2)

refatoração de código em busca de erros, com um ganho significativo de tempo e aumento de qualidade, tendo assim um produto final estável e confiável.

3. Frameworks JUnit E Mockito

Embora o intuito de todos os frameworks para testes automatizados seja o mesmo, de aprimorar os testes com mais eficiência, velocidade no tempo de execução, flexibilidade para poder executar os testes a qualquer hora, independente um dos outros, o processo de automação quando bem aplicado pode trazer resultados surpreendentes e muito significantes ao desenvolvimento de software.

3.1 Mockito

O Mockito gera mocks que permitem testar a comunicação com as dependências de uma classe em teste, através de representações de comportamentos diferentes em diversos ambientes. Indicado pra quem está começando com testes unitários, é uma ferramenta fácil de ser utilizada, possui suporte simples para a criação de mocks, deixando sua escrita de teste limpa e legível, se tornando um framework fácil de lidar.

Entre tanto, podemos utiliza-la como complemento do JUnit para testar a mesma funcionalidade de classes e métodos, através de simulações de ambientes e comportamento diferentes com a criação de mocks, que pode ser gerado por um

framework especifico como o Mockito.

3.2 JUnit

JUnit é um framework para a automação de testes unitários, onde a sua linguagem de programação é exclusiva para Java. Possui uma API completa para a criação e execução dos testes através do console das IDE’s, programamos os testes para cada funcionalidade do software que será executado de forma automática pelo JUnit, muito rápido, que por sua vez apresenta um relatório, se o teste passou ou falhou e caso falhe ele aponta onde está o erro.

O JUnit que inclusive já vem por padrão em algumas IDE’s como NetBeans , Eclipse entre outras. Mas caso utilize outra IDE que não possua o JUnit, é uma ferramenta free, ou seja gratuito, que pode ser baixado pelo site: www.junit.org.

4. Estudo de Caso

Visando validar os métodos e ferramentas de testes automatizados, foi realizado um estudo de caso com as framewoks JUnit e Mockito.

4.1 Implementando Teste com JUnit

Para podermos ver na prática como é o real funcionamento do teste e seu benefício para o software, garantindo que se sofrer alguma alteração no futuro que seja testada por

(3)

estes métodos de teste, vamos primeiramente demonstrar um exemplo utilizando o

famework JUnit.

O senário que vamos demonstrar para exemplificar o teste com JUnit está sendo mostrado na figura 1, o exemplo será de um sistema que calcula folha de pagamento dos funcionários, onde possuem as classes (BaseCalculoFP, CalculoDeFolhaDePagamento, DemonstrativoFP, EstrategiaCalculoFP,EstrategiaCalculoPadrao, EstrategiaDeCalculoSoFixo e a classe Pessoa). O foco do teste ficará em cima da classe "CalculoDeFolhaDePagamento.Java" onde encontra-se o principal método a ser testado que é o "calcular()", que recebe como parâmetro uma base de cálculo e faz o cálculo pagamento chamando a estratégia de cálculo selecionada.

Figura 1: Classe cálculo de folha de pagamento, Trabalho em aula: Arthur Zavadski.

No primeiro teste Figura 2, estamos testando o método de cálculo de folha de pagamento sem base de cálculo apenas para testar valores vazios, a validação com o "assertEquals" está validando apenas se o resultado da folha armazenada no DemonstrativoFP está com o valor zero, que é a condição pra que este teste possa passar.

Figura 2: Teste sem base de cálculo 1, Trabalho em aula: Arthur Zavadski.

Neste segundo exemplo Figura 3, teste da classe de cálculo de folha de pagamento vamos mostrar um teste utilizando todos os recursos da classe, onde o método "testarFolhaComBaseDeCalculoA", passo 1 está criando o objeto da classe "CalculoDeFolhaDePagamento", no passo 2 cria também todas as variáveis de valores que serão passados para os métodos, passo 3 cria base de cálculo com os valores calculados passando uma nova pessoa que seria o funcionário da folha de pagamento. No passo 4 já começa a ser feitas as validações do teste pelo método assertEquals que

(4)

valida os valores passados se são iguais caso não seja ele quebra o teste resultando a mensagem passada no método.

Figura 3: Teste sem base de cálculo 2, Trabalho em aula: Arthur Zavadski.

4.2 Implementando Teste com Mockito

Para demonstrar um teste desenvolvido utilizando mocks, vamos utilizar uma classe Pedido de Venda, onde possui uma interface PedidoVendaDao para obter o código do pedido. Além da interface o que vamos testar utilizando mock será a classe que faz a troca do pedido aonde se o pedido estiver com status Cancelado ele vai validar a mensagem de aviso se está apresentando corretamente.

Primeiramente, para utilizarmos o mockito precisa ser feito na classe, imports da biblioteca. Para este exemplo a declaração na classe ficou desta maneira "importstaticorg.mockito.Mockito.*", vamos testar a classe TrocaPedidoVenda onde recebe um pedido e tenta fazer a troca do mesmo.

No teste implementado na Figura 4 vemos o método "testarTrocarPedidoCancelado" identidicado pela annotation @Test que identifica um método de teste. Neste método vamos mockara interface de "PedidoVendaDao", criar um objeto do tipo PedidoVenda que seria o pedido da venda criado, seta o status deste pedido para cancelado, após isso dizer para o mockito que quando chamar o método obter e passar um atributo do tipo long e retorne o meu pedido.

Assim podemos criar o atributo da classe de TrocarPedidoVenda passando minha interface mockada chamar o método trocar passando o atributo long como o código do pedido, dentro da classe trocar quando for chamar o método obter "pedidoVendaDao.obter(codigoPedido);", passando o código do pedido ele me retornará o pedido passado pelo mockito que no caso é um pedido com status cancelado, ao validar nosso assertEquals verificamos se a mensagem de pedido cancelado está correta finalizando o teste utilizando o Mockito.

(5)

Figura 4: Teste utilizando Mockito, Artigo: Douglas Delapria.

5. Resultados

Com foco no estudo aplicado nas duas metodologias de teste, uma utilizando o

framework JUnit e a outra utilizando Mockito, tendo como base a comparação de

complexidade podemos afirmar que dependendo do método ou classe que vai ser testado apenas utilizando JUnit fica mais dificil, já utilizando o Mockito ele acaba facilitando mais alguns testes, claro que cada caso de teste é único e deve ser tratado da melhor maneira possível cobrindo todas as possibilidades de teste que uma método a ser testado vá proporcionar.

Já o Mockito podemos destacar alguns benefícios ao teste como por exemplo: Teste mais rápidos - como o mockito acaba escondendo algumas classes, o teste acaba ficando mais leve por não estar integrado a nada. Teste sem dependência de dados, neste caso não foi preciso cadastrar nenhum pedido para o teste da troca ser executado apenar utilizar mock na classe para a simulação dos pedidos.

6. Considerações Finais

A implementação dos testes automatizados no software contribui para melhorar a quantidade do código e o mais importante, a garantia de entrega de qualidade no produto final para o cliente, que é o foco principal das empresas de hoje, garantir qualidade para ter um sistema confiável.

Neste artigo vimos o desenvolvimento de um teste no framework JUnit e outro utilizando Mockito, ambos garantem que a classe ou método testado vai estar funcionando, caso sofrer alguma alteração no método testado que cause impacto no resultado o teste bem implementado irá detectar e informar ao usuário que aquela funcionalidade parou de funcionar.

Falamos também das vantagens de usar teste com Mockito, com sua escrita simples e intuitiva, pode nos auxiliar a produzir códigos de testes mais limpos e

(6)

legíveis. Para melhorar e garantir que tudo funcionara corretamente o ideal é criar teste utilizando a prática de TDD, que garante um código de mais qualidade e testável.

7. Referências

Barranco, D.S. Tecnologias e técnicas de testes automatizados. 2012. 58f. Monografia (Graduação) – UNIPAR, Paranavaí, 2012.

Medeiros, M.P. JUnit – Implementando testes unitários em java – Parte 1. DevMedia, nov. 2009. Disponivel em: <http://www.devmedia.com.br/junit-implementando-testes-unitarios-em-java-parte-i/1432> Acesso em: 14/05/2014.

Negrini, C. Desafios e benefícios da automação de testes . Revista Engenharia de

Software Magazine 58, mai. 2013. Disponivel em:

<http://www.devmedia.com.br/desafios-e-beneficios-da-automacao-de-testes-engenharia-de-software-magazine-58/28051#ixzz2zzXMlggm> Acesso em: 12/05/2014.

Pierin, F. Testes unitários avançados. Revista Java Magazine 110, dez. 2012. Disponivel em: <http://www.devmedia.com.br/testes-unitarios-avancados-revista-java-magazine-110/26552> Acesso em: 15/05/2014.

Rocha, F.G. Introdução à garantia de qualidade do software e ferramentas para

testes. DevMedia, mai. 2013. Disponivel em:

<http://www.devmedia.com.br/introducao-a-garantia-de-qualidade-de-software-e-ferramentas-para-teste/28027> Acesso em: 19/05/2014.

Rocha, F.G. Introdução ao desenvolvimento guiado por teste (TDD) com JUnit. DevMedia, dez. 2012. Disponivel em: <http://www.devmedia.com.br/introducao-ao-desenvolvimento-guiado-por-teste-tdd-com-junit/26559> Acesso em: 14/05/2014. Silva, B.F. Introdução aos testes funcionais automatizados com JUnit e Selenium

WebDriver. DevMedia, mai. 2013. Disponivel em:

<http://www.devmedia.com.br/introducao-aos-testes-funcionais-automatizados-com-junit-e-selenium-webdriver/28037> Acesso em: 14/05/2014.

Trovão, J.C.; Dias-Neto, A.C. Automação de testes funcionais para aplicações da

plataforma android. Revista Engenharia de Software Magazine 63, out. 2013.

Disponivel em: <http://www.devmedia.com.br/automacao-de-testes-funcionais-para-aplicacoes-da-plataforma-android/29380#ixzz2zzWJ95gP> Acesso em: 12/05/2014.

Referências

Documentos relacionados

Ataque Especial (1 ponto): Usando seu golpe Rose Whip (Chicote de Rosas), Kurama pode infligir mais dano com sua Força, contando como 3d ao invés de 1d, mas sua Habilidade conta como

Segundo Leal, Silva e Santana (2007), já é consenso entre os farmacêuticos que está criada uma cultura magistral, no mercado farmacêutico e entre a população brasileira,

 Comparar a oscilação postural (OP) através da análise do deslocamento do centro de pressão (DCP) - comprimento e área, o tempo de estabilização (TE) e pico inicial

Este estudo tem como objetivo o uso de dados do mapa topográfico da PK na geração de mapas temáticos derivados e de dados quantitativos através de um Sistema de

– O problema final perguntava se existia um algoritmo para decidir sobre a veracidade de qualquer lógica proposicional envolvendo os números naturais... 2) Matemática --

*.. Fortes: o pessoal nos recebeu bem e tentar de informar nos bem entre as primeiros dias. Eles sempre estavam disponsivel para ajudar em caso de duvidas. Fraco: eu nao percebi

Desde que durante os horários de negociação oficiais do índice subjacente o preço de exercício não seja atingido, apenas interessa para efeitos de verificação de um

No dia 7 de Outubro de 2001, os Estados Unidos e forças aliadas lançaram uma campanha militar que levou à derrota dos Talibã e à formação da Autoridade Afegã Interina