Testes Unitários e testes de integração: Como e quando usar?

42 views
Skip to first unread message

João Angelo

unread,
Dec 13, 2017, 4:08:10 PM12/13/17
to TDD no mundo real
Boa noite, galera. Recentemente venho estudando testes unitários, de integração, TDD, etc, afim de começar a aplicar a cultura de testes no meu dia a dia. No projeto de negócio do software que desenvolvo, acredito que em todos os métodos das classes existem chamadas ao banco de dados. A minha dúvida é: A maioria dos meus testes então serão de integração? Se sim, isso não iria de encontro com a ideia da pirâmide de testes onde a maioria dos testes devem ser unitários? 

Osni Oliveira

unread,
Dec 13, 2017, 4:36:47 PM12/13/17
to tdd-no-m...@googlegroups.com
Boa noite, João,

Quando você fala que "em todos os métodos das classes existem chamadas ao banco de dados", isso significa que você não faz nenhuma separação de responsabilidade nesse ponto? Por exemplo, usando o padrão DAO, Entidades que possuem apenas regras de negócio e independem de como os dados serão persistidos, etc.?

Se sim, tenho uma boa e uma má notícia. A boa é que tentar escrever testes e cair nesse questionamento já mostrou um problema de design da sua aplicação. Se você não fizer essa separação, só para começar, vai ter muita dificuldade em escrever testes e quase todos serão de integração (como você mesmo disse sobre a pirâmide, isso normalmente é sinal que alguma coisa não vai bem). A má notícia é que, dependendo do tamanho do sistema e da quantidade de código já existente, isso vai ser um trabalhão! (Tem algumas ferramentas/idéias que podem ajudar a lidar com isso).

É isso, ou entendi errado?

    Osni



Em 13 de dezembro de 2017 19:08, João Angelo <angel...@gmail.com> escreveu:
Boa noite, galera. Recentemente venho estudando testes unitários, de integração, TDD, etc, afim de começar a aplicar a cultura de testes no meu dia a dia. No projeto de negócio do software que desenvolvo, acredito que em todos os métodos das classes existem chamadas ao banco de dados. A minha dúvida é: A maioria dos meus testes então serão de integração? Se sim, isso não iria de encontro com a ideia da pirâmide de testes onde a maioria dos testes devem ser unitários? 

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

João Angelo

unread,
Dec 13, 2017, 8:43:09 PM12/13/17
to tdd-no-m...@googlegroups.com
O projeto é dividido em camadas sim. Eu que não deixei isso claro na minha pergunta, Osni, foi mal. No caso, nenhum método das classes de negócio fazem chamadas ao banco, mas elas fazem chamadas a métodos da DAO que por sua vez fazem as chamadas ao banco. Depois de ter esclarecido isso, questiono: a maioria dos meus testes serão de integração? Se não, como fazer testes unitários para tais métodos da negócio que fazem chamadas a métodos da DAO que acessam o banco?

Desde já agradeço a atenção.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
João Ângelo Cândido Jr.
Estudante de Ciência da Computação
Universidade Estadual do Ceará (UECE)

Suelen Carvalho

unread,
Dec 14, 2017, 8:32:29 AM12/14/17
to tdd-no-m...@googlegroups.com
Oi João, tudo bem?

Minha sugestão seria mockar o retorno do método do DAO, já que na prática vc quer testar o comportamento de um método específico (teste unidade aqui) partindo do princípio que o BD tah funcionando ok. Faz sentido?

Elton Moraes

unread,
Dec 14, 2017, 10:40:00 AM12/14/17
to tdd-no-m...@googlegroups.com
Opa João!
Se quiser testar com dados, você pode usar o h2database, faz o inserts das suas entities e pedi para executar os scripts com o container annotation @SqlGroup  (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/jdbc/SqlGroup.html). Ai voce consegue chamar seu DAO. Espero que minha sugestão ajude.

Valeu!!

Abraço,

Elton Moraes
Elton Moraes
11 9 7080 9669

Osni Oliveira

unread,
Dec 14, 2017, 11:04:04 AM12/14/17
to tdd-no-m...@googlegroups.com
Oi João,

Concordo com a Suelen, o que você precisa para poder fazer teste de unidade é usar mock no lugar do DAO.
Sobre a sugestão do Elton, eu classificaria mais como teste de integração do que como unidade, mesmo usando uma ferramenta como o h2database. De qualquer modo, acho interessante ter esse tipo de testes, também - só cuidado para não exagerar, pelo que entendi você estava querendo "equilibrar a pirâmide", ter mais testes de unidade que de integração.

Abraço



João Angelo

unread,
Dec 14, 2017, 11:24:35 AM12/14/17
to tdd-no-m...@googlegroups.com
Muito obrigado, galera. Todas as dicas de vocês foram muito úteis. Agradeço a atenção. Vou analisar tudo o que foi colocado aqui. Abraços



Enviado com Mailtrack

Maurício Aniche

unread,
Dec 14, 2017, 11:38:40 AM12/14/17
to tdd-no-m...@googlegroups.com
Oi João,

Concordo com o que os colegas disseram aqui: talvez se vc melhorar um pouco o design do teu código, fica mais fácil testar. No entanto, você nunca vai conseguir fugir totalmente de testes de integração, afinal, vc vai querer testar aquela tua SQL complicada ou aquela integração com um serviço web.

Mudar o design da tua classe para facilitar o teste de unidade também faz sentido se você realmente tem regras de negócio que precisam ser testadas. Na prática, tem muito sistema que é apenas data-centric: salva no banco, mostra pro usuário, atualiza no banco, lista pro usuário. Se vc não tem regra de negócio (onde vc expressa por meio de ifs, fors, ...), mas sim apenas manipulação de dados que vem de uma base, talvez testes de unidade não sejam necessários, e você pode ir direto para os testes de integração/sistema.

Esse post recente do Kent Beck parece ser bem útil pra vc: https://www.facebook.com/notes/kent-beck/unit-tests/1726369154062608/

Um abraço,


Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
João Ângelo Cândido Jr.
Estudante de Ciência da Computação
Universidade Estadual do Ceará (UECE)

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Elton Moraes
11 9 7080 9669

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
João Ângelo Cândido Jr.
Estudante de Ciência da Computação
Universidade Estadual do Ceará (UECE)

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-r...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Maurício Aniche
Postdoc researcher
Delft University of Technology
@mauricioaniche

Rafael Ponte

unread,
Dec 14, 2017, 11:52:04 AM12/14/17
to tdd-no-m...@googlegroups.com
Opa,

Não tem muito pra onde correr em sistemas corporativos que no geral são data-centric (CRUDS, relatórios etc), você vai ter muitos testes de integração para os casos de usos (funcionalidades) dessa natureza.

Não há problema nisso, afinal você precisa testar corretude das tuas queries e DML SQL.

No início sua pirâmide será bem parecido para unidade e integração. Com o tempo e surgimento de regras de negócio o número de testes de unidade cresce.

Um abraço,
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

João Angelo

unread,
Dec 14, 2017, 11:52:06 AM12/14/17
to tdd-no-m...@googlegroups.com
Oi Maurício.

Sim, concordo em rever o design do código. Conversando com um amigo hoje sobre a minha realidade ele falou a mesma coisa: "Refatora teu código, se não, fica inviável fazer testes de unidade para ele". Vou ler o post indicado. Muito Obrigado.

Abraço.



Enviado com Mailtrack

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
João Ângelo Cândido Jr.
Estudante de Ciência da Computação
Universidade Estadual do Ceará (UECE)

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Elton Moraes
11 9 7080 9669

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
João Ângelo Cândido Jr.
Estudante de Ciência da Computação
Universidade Estadual do Ceará (UECE)

--
Você recebeu essa mensagem porque está inscrito no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Maurício Aniche
Postdoc researcher
Delft University of Technology
@mauricioaniche

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "TDD no mundo real" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/tdd-no-mundo-real/6LiBbLIax4M/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para tdd-no-mundo-real+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages