Top Posts

Série DesignPattern: Decorator

Continue lendo

Série Spring:Rodando Unit Test com Spring Framework

Posted by camilolopes | Posted in Series, Spring | Posted on 09-04-2013

0

Olá Pessoal,

Nesse post veremos como rodar nossos unit tests com o Spring framework, ou seja, aproveitar tudo de bom que tem o Spring e fazer nossos unit test funcionar normalmente. É bastante simples.

lets go…

Começando

Bem não vou entrar nos detalhes do que  é unit test, Spring, JUnit etc. Vamos direto ao ponto de maneira prática. Primeiro Crie um Java Project, o meu será SpringExampleUnitTest

note: claro que você precisa ter baixado o Spring framework core versão 3.x.

 

springexampleunittestproject

Note: adicione o arquivo commons-logging-1.1.1.jar  caso não tenha só baixar esse arquivo, basta digitar o nome no Google .

Desenvolvendo

Como bom baiano e pensando no carnaval de salvador vamos de chicletão. Temos uma interface que tem um método e uma classe que vai implementar:

 

package br.com.camilolopes;

public interface Competidor {

public void apresentar();

}

public class Chicletao implements Competidor {

                private Chicleteiro chicleteiroMusica;

                @Override

                public void apresentar() {

                               chicleteiroMusica.cantar();

                }

                public void setChicleteiroMusica(Chicleteiro chicleteiroMusica) {

                               this.chicleteiroMusica = chicleteiroMusica;

                }

}

 

public interface Musica {

void cantar();

}

public class Chicleteiro implements Musica {

                @Override

                public void cantar() {

                               System.out.println(“chicleteiro eu, chicleteira ela”);

                }

}

 

E no package conf, criamos um xml com as configurações do Spring:

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>

 <!– classe normal –>

 <bean id=”chicleteiro” />

<!– classe que implementa a interface –>

 <bean id=”bell”>

                <property name=”chicleteiroMusica” ref=”chicleteiro”/>

 </bean>

</beans>

 

Pronto. Agora vamos criar a classe de teste.Porém, vamos entender o que acontece com a nossa aplicação. Quando o método apresentar() é invocado, a classe vai se apresentar com a musica que deseja, no caso da classe Chicleteiro, vai cantar: “chicleteiro eu, chicleteira ela”.

 

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={“classpath:conf/idolos.xml”})

public class ChicletaoTest {

                @Autowired

                private Chicleteiro chicleteiro;

               

                @Test

                public void testCantar() {

                Chicletao chicletao = new Chicletao();

                chicletao.setChicleteiroMusica(chicleteiro);

                try{

                               chicletao.apresentar();

                }catch (NullPointerException e) {

                               Assert.fail(“not expected result”);

                }

                }

 

Com Spring precisamos usar anotação @RunWith e informar qual framework vamos usar, no nosso caso usamos o JUNIT.Em seguida com anotações @ContextConfiguration estamos dizendo qual o xml que tem as configurações do Spring que usaremos para os testes. Que é o mesmo da aplicação. Em seguida fizemos um teste que apenas chama o método apresentar, e esperamos que nunca tenhamos um NullPointerException, mas para isso acontecer é apenas se a instância que chama o método for null, ou seja, não for instanciada. E com esse teste estamos validando duas coisas, uma que o Spring realmente está instanciando o atributo e que o resultado é o que esperamos. Veja:

springexampleunitestgreenresult

 

E assim temos nosso unit test integrado com o Spring. Simples não?

GitHub

Acesse o repositório no github com todos os projetos da série Spring:  https://github.com/camilolopes/workspacespring

Vou ficando por aqui!!

See ya! 

Hibernate Schema Diferente via Java Project

Posted by camilolopes | Posted in Hibernate | Posted on 12-02-2012

0

olá Pessoal,

Este post é levemente diferente do que vimos no Mapeando schemas diferentes com o Hibernate. Lá tivemos que criar um bean para representar à tabela, neste aqui vamos usar um mapeamento para tabela já existente, assim evitamos de ter dois beans para uma mesma tabela.

Lets go…

Contexto

No post Mapeando schemas diferentes com o Hibernate assumimos que não existia nenhuma projeto Java que usasse o schema ereaders. Mas, no contexto de hoje vamos supor que tenha um outro projeto que use e já tenha os devidos mapeamentos para a tabela ereaders.usuario e não queremos ter que criar um novo bean em nosso projeto só para ler esse schema, pensamos em aproveitar o mapeamento já feito e usá-lo. Isso nos ajuda até em não ter que ficar atualizando cada bean, caso algum atributo da tabela venha sofrer alteração. Então temos os seguintes projetos Java:

O projeto sem enumeração é o que tem o mapeamento usando annotations para tabela que está em ereaders. Como usar esse bean em outro projeto java?

Muito simples, basta adicionarmos ao projeto HibernateSchema2 uma dependencia com o projeto HibernateSchema. Assim, podemos acessar as classes disponiveis naquele projeto. Para fazer isso, clique com o botão direito do projeto >> build path >> configure build path e adicione o projeto HibernateSchema, conforme a imagem a seguir:

No arquibo hibernate.cfg.xml informamos a classe nova que o projeto deve reconhecer via Hibernate:

< mapping class=“br.com.camilolopes.bean.Usuarios”/ >

Testando

Faremos algo semelhante ao que vimos no outro post, vamos ler dados da tabela e imprimir o valor em seguida, porém vamos usar Criteria API:

publicclass UserDAO extends DAO {

publicList getListUsers(){

begin();

Criteria criteria = getSession().createCriteria(Usuarios.class);

return criteria.list();

}

}

Na classe main, adicionamos o codigo:

publicstaticvoid main(String[] args) {

UserDAO userDAO = new UserDAO();

List<Usuarios> listUsers = userDAO.getListUsers();

for (Usuarios usuarios : listUsers) {

System.out.println(usuarios.getEmail()); } }

O resultado:

Nada de novo, o mesmo resultado que tivemos no outro post. Mas, qual a diferença? Veremos isso com base no que pode ser “problema” em alguns projetos.

Problema

  • um dos problemas é ter dependência com outro projeto, ou seja, se o outro não buildar/compilar o seu ficará preso. E isso em alguns cenários pode ser ruim. Depende da relação entre os projetos.

Vantagem

  • você não precisa ter mais dois beans para mesma tabela, então tudo é focado apenas no bean que já está no outro projeto, caso esta sofra alterações não preciso mudar no projeto HibernateSchema2. E evita essas duplicações de beans.

Qual usar?

Como falei, não há segredo, e sim necessidade, o que seu projeto importa mais? O que for mais importante é o que vai precisar.

Vou ficando por aqui espero que tenham gostado do post.

Abracos, see ya!