Você está na página 1de 9

Testes Unitários com JUnit

Prof. Evandro César Freiberger

Instituto Federal de Mato Grosso


Departamento da Área de Informática
evandro.freiberger@ifmt.edu.br

2022

Prof. Evandro César Freiberger (IFMT) Testes 2022 1/9


Sumário

1 Efeitos em Cascata de Testes Unitários

2 Object Mocks

Prof. Evandro César Freiberger (IFMT) Testes 2022 2/9


Efeitos em Cascata em Testes Unitários
Vamos criar uma situação de erro na implementação das classes Circulo e Cilindro.
Na classe Circulo, vamos introduzir um erro de cálculo de área.

Prof. Evandro César Freiberger (IFMT) Testes 2022 3/9


Efeitos em Cascata em Testes Unitários
O Erro introduzido na fórmula de cálculo da área da classe Circulo provocou erro no no seu
prório teste.

O erro ocorre justamente no caso de teste onde todos os dados estão corretos, e que
espera-se pelo cálculo correto da área.

Contudo, observa-se que ocorreu um erro semelhante na classe Cilindro, justamente quando
todos os dados estão correto e esperava-se receber a área correta.

O erro ocorre no cálculo da área do cilindro, pois esse cálculo depende do cálculo correto da
área do circulo, que faz parte do cálculo da área do cilindro.

Dessa forma, constata-se que um efeito colateral ocorreu, e em determindadas circunstância


fica mais difícil encontrar a origem do erro, num cenário com muita dependência/acoplamento
das unidades.

Prof. Evandro César Freiberger (IFMT) Testes 2022 4/9


Isolamento dos Testes Unitários
Uma das premissas mais fortes dos testes Unitário é que as unidades a serem testadas
devem ser isoladas de suas dependências.

Justificativas para essa premissa:


A isolamento da funcionalidade a ser testada;
Diminuir a complexidade da funcionalidade a ser testada;
Um teste não pode quebrar em decorrêcia da falha de uma funcionalidade que não está
sendo testada;
Por outro lado, não é possível desenvoler sistemas sem dependências.

A saída é isolar as dependências apenas durante os testes, simulando os comportamentos


das dependências.

Prof. Evandro César Freiberger (IFMT) Testes 2022 5/9


Object Mocks
Object Mocks foi o termo usado para objetos que simulam o comportamento de outros
objetos.

Esse termo foi traduzido para Objetos Dublês, que são objetos que figem ser outros objetos.

A boa notícia é que existem Frameworks que nos ajudam a criar os objetos dublês.

Usaremos o Framework Mokito.

Prof. Evandro César Freiberger (IFMT) Testes 2022 6/9


Framework Mokito
Primeiro passo para usarmos o Mokito é adicionarmos sua dependência ao pom.xml.
1 < ! −− h t t p s : / / m v n r e p o s i t o r y . com / a r t i f a c t / org . mockito / mockito −core −−>
2 <dependency>
3 < g r o u p I d >org . mockito < / g r o u p I d >
4 < a r t i f a c t I d >mockito −core < / a r t i f a c t I d >
5 <version>4.7.0< / version>
6 <scope> t e s t < / scope>
7 < / dependency>

Código 1: Dependência Maven Mokito

Segundo passo é criar uma instância do Mock baseado na classe que deve será "imitada".

Terceiro passo é ensinar o objeto Dublê a responder os métodos do objeto "imitado".

Veja isso no próximo código.

Prof. Evandro César Freiberger (IFMT) Testes 2022 7/9


Usando o Mockito (1)
1 package b r . i f m t . cba . negocio ;
2
3 i m p o r t s t a t i c org . j u n i t . A s s e r t . a s s e r t E q u a l s ;
4 i m p o r t s t a t i c org . mockito . Mockito . mock ;
5 i m p o r t s t a t i c org . mockito . Mockito . when ;
6
7 i m p o r t org . j u n i t . Test ;
8
9 p u b l i c c l a s s Ci li ndr oC om Mo cki to Te s t {
10
11 @Test
12 p u b l i c v o i d quandoTodosDadosCorretos ( ) {
13
14 / / c r i a n d o o o b j e t o duble
15 C i r c u l o c i r c u l o F a l s o = mock ( C i r c u l o . c l a s s ) ;
16
17 / / ensinando e l e a responder os metodos que serao usados
18 when ( c i r c u l o F a l s o . getRaio ( ) ) . thenReturn ( 2 . 0 ) ;
19 when ( c i r c u l o F a l s o . getArea ( ) ) . thenReturn ( 1 2 . 5 6 ) ;
20
21 C i l i n d r o c i l i n d r o = new C i l i n d r o ( c i r c u l o F a l s o , 4 ) ;
22 a s s e r t E q u a l s ( 7 5 . 3 9 , c i l i n d r o . getArea ( ) , 0 . 0 1 ) ;
23 }
24
25 @Test ( expected = RuntimeException . c l a s s )
26 p u b l i c v o i d quandoAlturaMenorOuIgualZero ( ) {
27 C i l i n d r o c i l i n d r o = new C i l i n d r o ( new C i r c u l o ( 2 ) , 0 ) ;
28 c i l i n d r o . getArea ( ) ;
29 }
30
31 @Test ( expected = RuntimeException . c l a s s )

Prof. Evandro César Freiberger (IFMT) Testes 2022 8/9


Usando o Mockito (2)
32 p u b l i c v o i d quandoRaioMenorOuIgualZero ( ) {
33 C i l i n d r o c i l i n d r o = new C i l i n d r o ( new C i r c u l o ( −1) , 4 ) ;
34 c i l i n d r o . getArea ( ) ;
35 }
36
37 @Test ( expected = RuntimeException . c l a s s )
38 public void quandoCirculoNull ( ) {
39 C i l i n d r o c i l i n d r o = new C i l i n d r o ( n u l l , 4 ) ;
40 c i l i n d r o . getArea ( ) ;
41 }
42
43 }

Prof. Evandro César Freiberger (IFMT) Testes 2022 9/9

Você também pode gostar