terça-feira, 6 de abril de 2010

Testando o Pojo do Hibernate usando Junit

Antes de implantar qualquer pojo convém testá-lo exaustivamente. Estou usando testes unitário junit para avaliar o pojo.

Tenho serviço reset para limpar a base de dados que é mysql quando precisar.

Além do serviço reset, tem outros serviços de testes: adicionar, deletar e atualizar.

Uso apenas uma tabela que é bairro, mas devemos testar todo o pojo para verificar problemas antes de implantar.

Classe de Testes Unitário do Pojo:

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import junit.framework.Assert;
import junit.framework.TestCase;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

public class TestPojo extends TestCase {

    public void setUp() throws Exception {
        //TestPojo.reset();
    }

    @Test
    public void testCriar() throws Exception {
        Bairro b = new Bairro();
        b.setNome("Anchieta");
        Bairro b1 = new Bairro();
        b1.setNome("Boa Vista");
        Assert.assertTrue(TestPojo.criar(b));
        Assert.assertTrue(TestPojo.criar(b1));
    }
    @Test
    public void testDeletar() throws Exception {
        Assert.assertTrue(TestPojo.deletar());
    }
    @Test
    public void testAtualizar() throws Exception {
        Assert.assertTrue(TestPojo.atualizar());
    }

    @SuppressWarnings("finally")
    public static boolean criar(Bairro b) {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Transaction transaction = session.beginTransaction();
        try {
            session.save(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {
            session.close(); 
         }

            return retorno; 
    }

    public static boolean deletar()  {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Bairro b= (Bairro) session.load(Bairro.class, new Long(13));

        Transaction transaction = session.beginTransaction();
        try {
            session.delete(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {
            session.close();
        }
        return retorno;
    }

    public static boolean atualizar()  {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Bairro b= (Bairro) session.load(Bairro.class, new Long(14));
        b.setNome("Vila Mario Quintana");
        Transaction transaction = session.beginTransaction();
        try {
            session.update(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {

            session.close();
        }
        return retorno;
    }

    @SuppressWarnings("deprecation")
    public static void reset() throws Exception {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            Connection connection = session.connection();
            try {
                Statement statement = connection.createStatement();
                try {
                    statement.executeUpdate("delete from bairro");

                    connection.commit();
                } finally {
                    statement.close();
                }
            } catch (HibernateException e) {

                connection.rollback();
                throw new Exception(e);
            } catch (SQLException e) {
                connection.rollback();
                throw new Exception(e);
            }
        } catch (SQLException e) {
            throw new Exception(e);
        } finally {
            session.close();
        }
    }

}

Pojo:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "bairro")
public class Bairro {
    @Id
    @GeneratedValue
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(name = "nome")
    private String nome;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

}

Hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
    <property name="hibernate.connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
        jdbc:mysql://localhost/java
    </property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.username">root</property>
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">none</property>
    <mapping class="...Bairro"/>
    </session-factory>
</hibernate-configuration>

 

Fonte: www.theserverside.com/news/1365222/Unit-Testing-Hibernate-With-HSQLDB

Bye see you next you

Um comentário:

  1. Boa noite Nina.
    Paz em seu coração.
    Sempre releio os pedidos de oração, em meu blog, e gostaria de saber notícias do Sr. Nelson Madeira.
    Fique com Deus.
    Um forte abraço.

    ResponderExcluir