Você está na página 1de 12

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 / 12


Sumário

1 Isolando Camada de Negócio da Camada de Persistência

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


Isolando Camada de Negócio para Automação de Testes Unitários
Quando queremos automatizar testes unitários para uma camada de negócio, precisamos
isolar os testes de tal forma que o teste não atinja a camada de pesistência, tão pouco a
integração com o banco de dados.

Para conseguirmos realizar os testes isolados da camada de negócio iremos "mockar"a


camada de persistência (DAOs).

Precisamos criar Object Mocks para os DAOs e ensiná-los a responder os métodos de


persitência com dados que não vão ou retornam do banco de dados.

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


Isolando Camada de Negócio para Automação de Testes Unitários (1)
A classe AlunoNegocio, mantém uma instância de AlunoDAO, recebida como parâmetro em
seu contrutor.

A instância de AlunoDAO é usada para realizar as operações de persitência e recuperação de


informações.
1 package b r . i f m t . cba . negocio ;
2
3 import java . u t i l . L i s t ;
4 import b r . i f m t . cba . p e r s i s t e n c i a . AlunoDAO ;
5 import b r . i f m t . cba . p e r s i s t e n c i a . P e r s i s t e n c i a E x c e p t i o n ;
6 import b r . i f m t . cba . vo . AlunoVO ;
7
8 p u b l i c c l a s s AlunoNegocio {
9
10 p r i v a t e AlunoDAO alunoDAO ;
11
12 p u b l i c AlunoNegocio ( AlunoDAO alunoDAO ) throws NegocioException {
13 i f ( alunoDAO ! = n u l l ) {
14 t h i s . alunoDAO = alunoDAO ;
15 } else {
16 throw new NegocioException ( " P e r s i s t e n c i a nao i n i c i a d a " ) ;
17 }
18 }
19
20 p u b l i c v o i d i n s e r i r ( AlunoVO alunoVO ) throws NegocioException {
21
22 S t r i n g mensagemErros = t h i s . v a l i d a r D a d o s ( alunoVO ) ;

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


Isolando Camada de Negócio para Automação de Testes Unitários (2)
23
24 if ( ! mensagemErros . isEmpty ( ) ) {
25 throw new NegocioException ( mensagemErros ) ;
26 }
27
28 try {
29 i f ( alunoDAO . i n c l u i r ( alunoVO ) == 0 ) {
30 throw new NegocioException ( " I n c l u s a o nao r e a l i z a d a ! ! " ) ;
31 }
32 } c a t c h ( P e r s i s t e n c i a E x c e p t i o n ex ) {
33 throw new NegocioException ( " E r r o ao i n c l u i r o aluno − " + ex . getMessage ( ) ) ;
34 }
35 }
36
37 p u b l i c v o i d a l t e r a r ( AlunoVO alunoVO ) throws NegocioException {
38 S t r i n g mensagemErros = t h i s . v a l i d a r D a d o s ( alunoVO ) ;
39 i f ( ! mensagemErros . isEmpty ( ) ) {
40 throw new NegocioException ( mensagemErros ) ;
41 }
42
43 try {
44 i f ( alunoDAO . b u s c a r P o r M a t r i c u l a ( alunoVO . g e t M a t r i c u l a ( ) ) == n u l l ) {
45 throw new NegocioException ( " Aluno nao l o c a l i z d o ! ! " ) ;
46 }
47
48 i f ( alunoDAO . a l t e r a r ( alunoVO ) == 0 ) {
49 throw new NegocioException ( " A l t e r a c a o nao r e a l i z a d a ! ! " ) ;
50 }
51 } c a t c h ( P e r s i s t e n c i a E x c e p t i o n ex ) {
52 throw new NegocioException ( " E r r o ao a l t e r a r o aluno − " + ex . getMessage ( ) ) ;
53 }
54 }

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


Isolando Camada de Negócio para Automação de Testes Unitários (3)
55
56 p u b l i c v o i d e x c l u i r ( i n t m a t r i c u l a ) throws NegocioException {
57 try {
58 i f ( alunoDAO . b u s c a r P o r M a t r i c u l a ( m a t r i c u l a ) == n u l l ) {
59 throw new NegocioException ( " Aluno nao l o c a l i z d o ! ! " ) ;
60 }
61 i f ( alunoDAO . e x c l u i r ( m a t r i c u l a ) == 0 ) {
62 throw new NegocioException ( " Exclusao nao r e a l i z a d a ! ! " ) ;
63 }
64 } c a t c h ( P e r s i s t e n c i a E x c e p t i o n ex ) {
65 throw new NegocioException ( " E r r o ao e x c l u i r o aluno − " + ex . getMessage ( ) ) ;
66 }
67 }
68
69 p u b l i c L i s t <AlunoVO> pesquisaParteNome ( S t r i n g parteNome ) throws NegocioException {
70 try {
71 r e t u r n alunoDAO . buscarPorNome ( parteNome ) ;
72 } c a t c h ( P e r s i s t e n c i a E x c e p t i o n ex ) {
73 throw new NegocioException ( " E r r o ao p e s q u i s a r aluno p e l o nome − " + ex . getMessage ( ) ) ;
74 }
75 }
76
77 p u b l i c AlunoVO p e s q u i s a M a t r i c u l a ( i n t m a t r i c u l a ) throws NegocioException {
78 try {
79 r e t u r n alunoDAO . b u s c a r P o r M a t r i c u l a ( m a t r i c u l a ) ;
80 } c a t c h ( P e r s i s t e n c i a E x c e p t i o n ex ) {
81 throw new NegocioException ( " E r r o ao p e s q u i s a r aluno p e l a m a t r i c u l a − " + ex . getMessage ( ) ) ;
82 }
83 }
84
85 p r i v a t e S t r i n g v a l i d a r D a d o s ( AlunoVO alunoVO ) {
86

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


Isolando Camada de Negócio para Automação de Testes Unitários (4)
87 S t r i n g mensagemErros = " " ;
88
89 i f ( alunoVO . getNome ( ) == n u l l | | alunoVO . getNome ( ) . l e n g t h ( ) == 0 ) {
90 mensagemErros += "Nome do aluno nao pode s e r v a z i o " ;
91 }
92
93 i f ( alunoVO . getNomeMae ( ) == n u l l | | alunoVO . getNomeMae ( ) . l e n g t h ( ) == 0 ) {
94 mensagemErros += " \ nNome da mae nao pode s e r v a z i o " ;
95 }
96
97 i f ( alunoVO . getNomePai ( ) == n u l l | | alunoVO . getNomePai ( ) . l e n g t h ( ) == 0 ) {
98 mensagemErros += " \ nNome do p a i nao pode s e r v a z i o " ;
99 }
100
101 i f ( alunoVO . getSexo ( ) == n u l l ) {
102 mensagemErros += " \ nSexo nao pode s e r n u l o " ;
103 }
104
105 i f ( alunoVO . getEndereco ( ) ! = n u l l ) {
106 i f ( alunoVO . getEndereco ( ) . getLogradouro ( ) == n u l l | | alunoVO . getEndereco ( ) . getLogradouro ( ) . l e n g t h ( ) == 0 ) {
107 mensagemErros += " \ nLogradouro nao pode s e r v a z i o " ;
108 }
109
110 i f ( alunoVO . getEndereco ( ) . getNumero ( ) <= 0 ) {
111 mensagemErros += " \ nNumero deve s e r maior que zero " ;
112 }
113
114 i f ( alunoVO . getEndereco ( ) . g e t B a i r r o ( ) == n u l l | | alunoVO . getEndereco ( ) . g e t B a i r r o ( ) . l e n g t h ( ) == 0 ) {
115 mensagemErros += " \ n B a i r r o nao pode s e r v a z i o " ;
116 }
117
118 i f ( alunoVO . getEndereco ( ) . getCidade ( ) == n u l l | | alunoVO . getEndereco ( ) . getCidade ( ) . l e n g t h ( ) == 0 ) {

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


Isolando Camada de Negócio para Automação de Testes Unitários (5)
119 mensagemErros += " \ nCidade nao pode s e r v a z i o " ;
120 }
121 i f ( alunoVO . getEndereco ( ) . g e t U f ( ) == n u l l ) {
122 mensagemErros += " \ nUF nao pode s e r v a z i o " ;
123 }
124 } else {
125 mensagemErros += " \ nEndereco nao pode s e r v a z i o " ;
126 }
127
128 r e t u r n mensagemErros ;
129 }
130 }

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


Isolando Camada de Negócio para Automação de Testes Unitários (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 . f a i l ;
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 import br . ifmt . cba . p e r s i s t e n c i a . AlunoDAO ;
10 import br . ifmt . cba . p e r s i s t e n c i a . P e r s i s t e n c i a E x c e p t i o n ;
11 import br . ifmt . cba . vo . AlunoVO ;
12 import br . ifmt . cba . vo . EnderecoVO ;
13 import br . ifmt . cba . vo . EnumSexo ;
14 import br . ifmt . cba . vo . EnumUF ;
15
16 p u b l i c c l a s s AlunoNegocioTest {
17
18 @Test
19 public void testInserirDadosCorretos ( ) {
20 AlunoVO alunoVO = new AlunoVO ( ) ;
21 alunoVO . setNome ( " Aluno Teste " ) ;
22 alunoVO . setNomeMae ( "Mae do Aluno Teste " ) ;
23 alunoVO . setNomePai ( " Pai do Aluno Teste " ) ;
24 alunoVO . setSexo ( EnumSexo . MASCULINO) ;
25 alunoVO . setEndereco ( new EnderecoVO ( " Rua das F l o r e s " , 10 ,
26 " Centro " , " Cuiaba " , EnumUF .MT) ) ;
27
28 try {
29 AlunoDAO alunoDAOFalso = mock ( AlunoDAO . c l a s s ) ;
30 when ( alunoDAOFalso . i n c l u i r ( alunoVO ) ) . thenReturn ( 1 ) ;
31 AlunoNegocio alunoNegocio = new AlunoNegocio ( alunoDAOFalso ) ;

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


Isolando Camada de Negócio para Automação de Testes Unitários (2)
32
33 alunoNegocio . i n s e r i r ( alunoVO ) ;
34 } catch ( PersistenciaException e ) {
35 f a i l ( " E r r o ao p r e p a r a r a camada de p e r s i t e n c i a − " +e . getMessage ( ) ) ;
36 } c a t c h ( NegocioException e ) {
37 f a i l ( " Teste de I n c l u s a o f a l h o u − " +e . getMessage ( ) ) ;
38 }
39 }
40
41 @Test ( )
42 public void testInserirDadosIncorretos ( ) {
43 AlunoVO alunoVO = new AlunoVO ( ) ;
44 alunoVO . setNome ( " " ) ;
45 alunoVO . setNomeMae ( " " ) ;
46 alunoVO . setNomePai ( " " ) ;
47 alunoVO . setSexo ( n u l l ) ;
48 alunoVO . setEndereco ( n u l l ) ;
49
50 try {
51 AlunoDAO alunoDAOFalso = mock ( AlunoDAO . c l a s s ) ;
52 when ( alunoDAOFalso . i n c l u i r ( alunoVO ) ) . thenReturn ( 1 ) ;
53 AlunoNegocio alunoNegocio = new AlunoNegocio ( alunoDAOFalso ) ;
54
55 alunoNegocio . i n s e r i r ( alunoVO ) ;
56 f a i l ( " Nao p o d e r i a chegar nessa l i n h a " ) ;
57 } catch ( PersistenciaException e ) {
58 f a i l ( " E r r o ao p r e p a r a r a camada de p e r s i t e n c i a − " +e . getMessage ( ) ) ;
59 } c a t c h ( NegocioException e ) {
60
61 }
62 }
63

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


Isolando Camada de Negócio para Automação de Testes Unitários (3)
64 @Test
65 public void testAlterarDadosCorretos ( ) {
66 AlunoVO alunoVO = new AlunoVO ( ) ;
67 alunoVO . s e t M a t r i c u l a ( 1 2 3 ) ;
68 alunoVO . setNome ( " Aluno Teste " ) ;
69 alunoVO . setNomeMae ( "Mae do Aluno Teste " ) ;
70 alunoVO . setNomePai ( " Pai do Aluno Teste " ) ;
71 alunoVO . setSexo ( EnumSexo . MASCULINO) ;
72 alunoVO . setEndereco ( new EnderecoVO ( " Rua das F l o r e s " , 10 ,
73 " Centro " , " Cuiaba " , EnumUF .MT) ) ;
74
75 try {
76 AlunoDAO alunoDAOFalso = mock ( AlunoDAO . c l a s s ) ;
77 when ( alunoDAOFalso . b u s c a r P o r M a t r i c u l a ( alunoVO . g e t M a t r i c u l a ( ) ) ) . thenReturn ( alunoVO ) ;
78 when ( alunoDAOFalso . a l t e r a r ( alunoVO ) ) . thenReturn ( 1 ) ;
79 AlunoNegocio alunoNegocio = new AlunoNegocio ( alunoDAOFalso ) ;
80
81 alunoNegocio . a l t e r a r ( alunoVO ) ;
82 } catch ( PersistenciaException e ) {
83 f a i l ( " E r r o ao p r e p a r a r a camada de p e r s i t e n c i a − " +e . getMessage ( ) ) ;
84 } c a t c h ( NegocioException e ) {
85 f a i l ( " Teste de A l t e r a c a o f a l h o u − " +e . getMessage ( ) ) ;
86 }
87 }
88
89 @Test
90 public void t e s t E x c l u i r ( ) {
91 AlunoVO alunoVO = new AlunoVO ( ) ;
92 alunoVO . s e t M a t r i c u l a ( 1 2 3 ) ;
93 alunoVO . setNome ( " Aluno Teste " ) ;
94 alunoVO . setNomeMae ( "Mae do Aluno Teste " ) ;
95 alunoVO . setNomePai ( " Pai do Aluno Teste " ) ;

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


Isolando Camada de Negócio para Automação de Testes Unitários (4)
96 alunoVO . setSexo ( EnumSexo . MASCULINO) ;
97 alunoVO . setEndereco ( new EnderecoVO ( " Rua das F l o r e s " , 10 ,
98 " Centro " , " Cuiaba " , EnumUF .MT) ) ;
99
100 try {
101 AlunoDAO alunoDAOFalso = mock ( AlunoDAO . c l a s s ) ;
102 when ( alunoDAOFalso . b u s c a r P o r M a t r i c u l a ( alunoVO . g e t M a t r i c u l a ( ) ) ) . thenReturn ( alunoVO ) ;
103 when ( alunoDAOFalso . e x c l u i r ( alunoVO . g e t M a t r i c u l a ( ) ) ) . thenReturn ( 1 ) ;
104 AlunoNegocio alunoNegocio = new AlunoNegocio ( alunoDAOFalso ) ;
105
106 alunoNegocio . e x c l u i r ( alunoVO . g e t M a t r i c u l a ( ) ) ;
107 } catch ( PersistenciaException e ) {
108 f a i l ( " E r r o ao p r e p a r a r a camada de p e r s i t e n c i a − " +e . getMessage ( ) ) ;
109 } c a t c h ( NegocioException e ) {
110 f a i l ( " Teste de Exclusao f a l h o u − " +e . getMessage ( ) ) ;
111 }
112 }
113 }

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

Você também pode gostar