sábado, 3 de abril de 2010

CRUD com Testes Unitários JUnit 4.7

Através deste tutorial pretendo mostrar um exemplo de aplicação de acesso ao banco de dados (CRUD) com testes de unidade.
Estou usando Eclipse Galileu e JUnit 4.7, porém fique a vontade para escolher o Eclipse IDE e JUnit.

Os testes de unidade são implementados antes do código da funcionalidade.

Fluxo do TDD:

  • Escrever o teste unitário;
  • Fazer o teste quebrar;
  • Escrever o código;
  • Fazer o teste passar;
  • Refatorar.

tdd


O que é um teste automatizado?

  • Um código que testa outro código e analisa o resultado.
  • O código poderá ser executado muitas vezes.
O que faz testes de unidade?
  • Testa geralmente uma classe;
  • Não deve se preocupar com outros módulos;
  • Teste tipo caixa branca;
  • Foca sempre o negócio e não a implementação.

Set Up e Tear Down(organização do teste)

  • Set Up: Prepara o ambiente para teste;
  • Tear Down: Limpa o ambiente.

Configuração do Java Build Path com JUnit 4.7
Download do Junit e documentação: http://www.junit.org/

javabuild

Código do CRUD Fone Pessoa Física

Interface do DAO Fone Pessoa Física

public interface FoneFisicaDAO {
    public List<FoneFisica> buscarFones(int id);
    public FoneFisica buscarFone(int id);
    public boolean criar(int idpessoafisica, String fone);
    public boolean alterar(int id, String fone);
    public boolean excluir(int id);

}

Implementação da Interface Dao Fone Pessoa Física

Não coloquei implementação, porque isto fica a critério de cada projeto. Fique a vontade para hibernate, outro framework de persistência ou jdbc.

public class FoneFisicaDAOImpl implements FoneFisicaDAO{

public List buscarFones(int id) {

....

}

public FoneFisica buscarFone(int id) {

....

}

public boolean criar( int idpessoafisica, String fone) {

....

}

public boolean alterar(int id, String fone) {

....

}

public boolean excluir(int id) {

....

}

}

Implementação da parte de negócios do Fone Fisica é chamada FoneFisicaBusinessRules que utiliza a interface para chamar os serviços do DAO, não estou utilizando nenhum framework para IoC. Se houver a necessidade de ligação das classe FoneFisicaBusinessRules e FoneFisicaDAOImpl, terá que ser feito através de IoC.

public class FoneFisicaBusinessRules {
    private FoneFisicaDAO foneFisicaDAO;
    private FoneFisicaDAOImpl foneFisicaDAOimpl;

    public FoneFisicaBusinessRules(FoneFisicaDAO dao) {
        this.foneFisicaDAO = new FoneFisicaDAOImpl() ;
    }
    public List<FoneFisica> buscarFones(int id){
        return this.foneFisicaDAO.buscarFones(id);
    }
    public FoneFisica buscarFone(int id){
        return this.foneFisicaDAO.buscarFone(id);
    }
    public boolean criar(int idpessoafisica, String fone){
        return this.foneFisicaDAO.criar(idpessoafisica, fone);
    }
    public boolean alterar(int id, String fone){
        return this.foneFisicaDAO.alterar(id, fone);
    }
    public boolean excluir(int id){
        return this.foneFisicaDAO.excluir(id);
    }

}

Testes de unidade

import junit.framework.TestCase;

import org.junit.Assert;
import org.junit.Test;

import br.com.madeira.pessoa.businessrules.FoneFisicaBusinessRules;
import br.com.madeira.pessoa.daoimpl.FoneFisicaDAOImpl;
import br.com.madeira.pessoa.domain.FoneFisica;

public class FoneFisicaTest extends TestCase {
    private FoneFisicaBusinessRules testFoneFisica;

    public void setUp() {
        testFoneFisica = new FoneFisicaBusinessRules(new FoneFisicaDAOImpl()); Fazendo uma injeção de dependência através do construtor. 

    }

    @Test
    public void testBuscaFone() {
        FoneFisica f = testFoneFisica.buscarFone(3);
        Assert.assertNotNull(f);

    }

    @Test
    public void testCriarFone() {
        boolean b = testFoneFisica.criar(3, "6666665");
        Assert.assertTrue(b);

    }

}

Como rodar JUnit?

Clique no botão direito no projeto e escolha a opção Run as -> JUnit test.

Nesta janela temos o retorno em verde de tudo que esta ok no teste com o nome do teste, o que esta em azul com x falhou no teste.

junit

 

Fonte: http://ccsl.ime.usp.br/agilcoop/
e

http://www.junit.org/

"Nós somos o que fazemos repetidamente. Excelência, não é uma ação isolada, mas um hábito" - Aristóteles

Bye see you next post

Nenhum comentário:

Postar um comentário