Java EE 6: Da configuração aos testes - Parte 1
Java EE 6: Da configuração aos testes - Parte 3
Esse artigo demonstra como testar aplicações Java EE 6, como construir interfaces gráficas e como fazer a comunicação com o back-end desenvolvido na primeira parte desse artigo. Para o desenvolvimento dos testes será usado o framework Arquillian, enquanto que para a apresentação será usado o JSF 2/PrimeFaces e o CDI para integração com o back-end.
Em que situação o tema é útil:
O artigo apresenta ao leitor um conjunto de tecnologias que são comumente envolvidas em um projeto Java EE 6 e que trazem grandes benefícios, como automatização de tarefas, aumento de produtividade e melhoria de qualidade da aplicação.
Resumo DevMan:
O desenvolvimento de testes durante a implementação de um sistema é um assunto que ganhou muita importância nos últimos anos e não pode ser esquecido em nenhum projeto, ainda que este use Java EE e necessite de um framework externo para auxílio, como é o caso do Arquillian. Outros dois assuntos que merecem atenção especial são a usabilidade e o tempo de resposta de requisições, pois um sistema de difícil uso e lento pode espantar seus visitantes. Estes são alguns dos temas abordados neste artigo.
Na primeira parte do artigo foi criado o back-end da aplicação de exemplo, cujo objetivo é demostrar de forma prática o uso das tecnologias propostas, como Java EE 6 (CDI, EJB, JPA e JSF), PrimeFaces, Arquillian, Maven e JBoss. Para isso, começamos com uma introdução sobre cada uma dessas tecnologias, a fim de deixar o leitor mais familiarizado com o propósito de cada uma delas. Na sequência, começamos o desenvolvimento da aplicação propriamente dita, passando pela apresentação dos seus requisitos e do seu modelo, pela criação da base de dados e configuração do data source no JBoss, criação e configuração do projeto no Eclipse e no Maven, e a própria codificação. Durante esse processo, explicamos o código desenvolvido em todas as camadas, como modelo, regras de negócio e acesso a dados. Essa segunda parte do artigo dará ênfase aos testes, criação das interfaces e na integração com o back-end.
A criação de testes automatizados há até pouco tempo era considerado por muitos uma tarefa muito custosa e que não trazia ganhos reais. Com a maior popularização de metodologias ágeis, escrever testes automatizados não deixou de ser uma tarefa custosa, porém mostrou e continua mostrando que os ganhos obtidos pagam todo esse investimento. Entre esses ganhos podemos citar melhoria do design e do código da aplicação, segurança na execução de refatorações, classes de testes usadas para ajudar no entendimento do sistema e a possibilidade de se fazer uma bateria de testes de regressão com apenas um clique. Esses ganhos têm feito com que até mesmo os desenvolvedores mais reticentes passassem a adotar o desenvolvimento de testes, e podemos dizer que quem ainda não adotou, está realmente perdendo um recurso fantástico no processo de construção de software. Fora essa questão conceitual, existia ainda a questão técnica no que diz respeito a testes de aplicações Java EE. Muitos criticavam – e com razão – que criar testes para aplicações Java EE era uma tarefa árdua, causando muitas dores de cabeça. Porém, com a criação do Arquillian, testar aplicações Java EE ficou tão simples quanto testar aplicações Spring ou aplicações standalone, o que invalida este argumento usado por alguns desenvolvedores.
Quanto à camada de apresentação, temos percebido nos últimos tempos usuários cada vez mais exigentes no que diz respeito a aplicações ricas e interativas. Essa exigência trouxe novas complexidades no desenvolvimento e fez com que novas ferramentas surgissem para facilitar essa tarefa. Um exemplo destas ferramentas é o jQuery, uma biblioteca JavaScript que, além de simplificar a codificação de aplicações que usam Ajax, também disponibiliza um conjunto de componentes ricos prontos para serem utilizados. Para atender a essa necessidade, o próprio JSF evoluiu bastante em sua versão 2, trazendo recursos como suporte nativo a Ajax e uso de anotações ao invés de arquivos XML. Além disso, alguns frameworks trouxeram um conjunto de componentes para serem usados pelo JSF, como o PrimeFaces e o RichFaces. Nesse artigo iremos utilizar o PrimeFaces, um framework que faz uso do jQuery e que traz uma coleção bem extensa de componentes ricos prontos para serem utilizados na camada de apresentação, além de se integrar naturalmente ao JSF.
O artigo passará por todas essas etapas, mostrando de forma prática como utilizar cada uma dessas ferramentas. Ao final, teremos uma versão totalmente funcional da aplicação, desde os testes automatizados até a disponibilização de interfaces gráficas.
Testando a aplicação
Conforme apresentado na introdução da primeira parte do artigo, testar aplicações Java EE sempre foi uma tarefa penosa. Porém, com a criação do Arquillian, as coisas ficaram muito mais simples e rápidas, especialmente em um container como o JBoss AS 7, que vai ao ar em poucos segundos. Como os testes criados com o Arquillian são executados diretamente no container, podemos escrever testes funcionais reais, sem mocks. Isso faz com que os testes sejam mais eficientes e objetivos, já que todo o software acaba sendo testado em conjunto.
O Arquillian é um framework bastante flexível e oferece ao desenvolvedor três formas de execução:
· Managed: Forma que será utilizada no artigo. Neste cenário, o JBoss AS 7 está instalado na máquina do desenvolvedor, porém é o Arquillian que vai cuidar do seu ciclo de vida, fazendo o deploy do pacote de testes, o start do servidor, a execução do pacote de testes, o undeploy desse pacote e o stop do servidor;
· Remote: O servidor está instalado na máquina do desenvolvedor e deve estar no ar no momento da execução dos testes. O Arquillian apenas faz o deploy/undeploy e execução do pacote de testes;
· Embedded: Parecido com o Managed, porém usa um servidor embarcado para execução dos testes. Nesse caso, o servidor embedded para execução dos testes é baixado pelo próprio Maven e controlado totalmente pelo Arquillian.
Um exemplo real pode ser visto na classe TestClienteServices (Listagem 1), que deve ficar em src/test/java – diretório padrão do Maven para armazenar as classes de teste. Essa é uma classe semelhante a qualquer classe JUnit, porém com algumas modificações para que os testes sejam utilizados pelo Arquillian.
A anotação @RunWith(Arquillian.class) indica que os testes devem ser executados pelo Arquillian e não diretamente pelo JUnit. O interessante de uma classe de testes com Arquillian é que se deve utilizar as próprias anotações do Java EE para fazer a injeção de dependências, da mesma forma que é feito no código real da aplicação. Como pode ser visto no exemplo, a anotação @Inject é usada fazer a injeção de uma instância da interface ClienteServices e da classe utilitária DaoTest (veja a Listagem 2).
A classe DaoTest é um EJB Stateless utilitário usado para auxiliar na classe de testes e possui somente um método, que é responsável por apagar todos os registros de uma determinada entidade JPA.
Para que o Arquillian possa obter todos os recursos solicitados pelo desenvolvedor (como entity manager e EJBs), é necessário que os testes sejam executados diretamente no servidor de aplicações. Para isso, deve-se criar um pacote executável (JAR, WAR ou EAR) em runtime contendo tanto as classes de testes quanto as classes a serem testadas, além de outros recursos necessários, como por exemplo, um persistence.xml. Para a criação desse pacote, é necessário criar um método static, que deve retornar o tipo de empacotamento desejado e ser anotado com @Deployment. No momento da execução dos testes, o Arquillian lê essas configurações e, através do framework ShrinkWrap, cria o pacote com as classes e recursos configurados. No nosso exemplo, a configuração do pacote a ser criado está sendo definida da seguinte maneira:
1. ShrinkWrap.create(WebArchive.class, "testCliente.war"): indica que o pacote a ser criado será um Web Archive com o nome testCliente.war;
2. addClasses(...): indica todas as classes que devem ser empacotadas juntamente com a classe de teste. Existem outros métodos auxiliares, como addPackage();
3. addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")): cria um arquivo em branco chamado beans.xml para que o CDI funcione corretamente;
4. addAsResource("test-persistence.xml", "META-INF/persistence.xml"): copia o arquivo test-persistence.xml com o nome persistence.xml, para que a classe de teste aponte para o banco de testes;
...Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.