Dúvida - Junit - CDI Injection

15 views
Skip to first unread message

Rafael Rauber

unread,
Nov 23, 2017, 1:38:39 PM11/23/17
to TDD no mundo real
Olá Maurício, fiz os cursos de testes que ministrou na Alura, mas tenho uma dúvida e não encontrei uma boa resposta em fóruns.

Em um projeto que trabalho, tenho algumas classes com métodos que utilizam dependências injetadas com CDI, e se eu for escrever algum código de teste para esses métodos, o CDI não injeta as dependências na classe de teste, e se instanciar a classe com new essas dependências também não serão injetadas.

Como posso fazer para que o CDI funcione para injetar as dependências na classe de testes? Ou existe outra forma que seja possível inicializar essas dependências?

Rafael Ponte

unread,
Nov 23, 2017, 3:50:11 PM11/23/17
to tdd-no-m...@googlegroups.com
Oi Rafael,

Você tem basicamente 3 alternativas para testar um bean do CDI:

1) Instanciar a classe manualmente via new e injetar as dependências via construtor, setter ou reflection;
2) Instanciar o contexto do CDI manualmente e fazer lookup do objeto que você quer para só então fazer os testes;
3) Usar o framework de testes Arquillian para facilitar sua vida, ele quem levantará o container do CDI para você;

A 1a opção é um teste de unidade básico, não tem muito segredo aqui. Basta mockar as dependências com Mockito por exemplo.

A 2a e 3a opção são testes de integração, afinal você está se integrando ao container do CDI e provavelmente a sistemas externos na qual ele se integra, como o banco de dados. Dependendo da sua app pode ser simples ou bem chatinho, pois você terá que pré-configurar seu ambiente de testes para funcionar (banco, e-mail, properties etc). Nesse caso, o Arquillian pode te ajudar a levantar junto com o container do CDI somente os beans que importam para cada cenário.

Um abraço,
--
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.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

Fred Farias

unread,
Nov 23, 2017, 3:55:39 PM11/23/17
to tdd-no-m...@googlegroups.com
Rafael,

Esse módulo do Apache Delta Spike pode ajudar.

https://deltaspike.apache.org/documentation/test-control.html

Att,

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

unread,
Nov 24, 2017, 2:48:06 AM11/24/17
to tdd-no-m...@googlegroups.com

Oi Rafael,

Também sou a favor de mudar um pouco a classe pra facilitar o teste e não precisar de mágica .

Dê um jeito de injetar a dependência. Cria um construtor ou mesmo um setter!

Um abraço !


On Thu, Nov 23, 2017, 21:55 Fred Farias <fredm...@gmail.com> wrote:
Rafael,

Esse módulo do Apache Delta Spike pode ajudar.

https://deltaspike.apache.org/documentation/test-control.html

Att,
Em 23 de novembro de 2017 15:38, Rafael Rauber <rrafa...@gmail.com> escreveu:
Olá Maurício, fiz os cursos de testes que ministrou na Alura, mas tenho uma dúvida e não encontrei uma boa resposta em fóruns.

Em um projeto que trabalho, tenho algumas classes com métodos que utilizam dependências injetadas com CDI, e se eu for escrever algum código de teste para esses métodos, o CDI não injeta as dependências na classe de teste, e se instanciar a classe com new essas dependências também não serão injetadas.

Como posso fazer para que o CDI funcione para injetar as dependências na classe de testes? Ou existe outra forma que seja possível inicializar essas dependências?

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

Leonardo Alexandre Ferreira Leite

unread,
Nov 24, 2017, 4:06:33 AM11/24/17
to tdd-no-m...@googlegroups.com
Eu gosto bastante de deixar o @Inject no próprio construtor. Assim o mesmo construtor é exercitado em teste e em produção. Em prod o CDI passa os parâmetros, e no teste é o próprio teste q passa seus mocks para o construtor.

Eu acho (acho) q usar o inject no construtor tb ajuda a separar melhor oq é dependência da classe (vai no construtor c inject) do q são parâmetros da operação (devem ser recebidos como argumentos do método).

Em 24 de nov de 2017 5:48 AM, "Maurício Aniche" <maurici...@gmail.com> escreveu:

Oi Rafael,

Também sou a favor de mudar um pouco a classe pra facilitar o teste e não precisar de mágica .

Dê um jeito de injetar a dependência. Cria um construtor ou mesmo um setter!

Um abraço !


On Thu, Nov 23, 2017, 21:55 Fred Farias <fredm...@gmail.com> wrote:
Rafael,

Esse módulo do Apache Delta Spike pode ajudar.

https://deltaspike.apache.org/documentation/test-control.html

Att,
Em 23 de novembro de 2017 15:38, Rafael Rauber <rrafa...@gmail.com> escreveu:
Olá Maurício, fiz os cursos de testes que ministrou na Alura, mas tenho uma dúvida e não encontrei uma boa resposta em fóruns.

Em um projeto que trabalho, tenho algumas classes com métodos que utilizam dependências injetadas com CDI, e se eu for escrever algum código de teste para esses métodos, o CDI não injeta as dependências na classe de teste, e se instanciar a classe com new essas dependências também não serão injetadas.

Como posso fazer para que o CDI funcione para injetar as dependências na classe de testes? Ou existe outra forma que seja possível inicializar essas dependências?

--
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 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 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.
Reply all
Reply to author
Forward
0 new messages