JUnit Test no DAO

Java

04/02/2011


Ola pessoal.Estou com o seguinte problema: tenho meus DAOS e estou criando os testes automatizados. Um deles nao passou conforme a figura abaixo. Alguem saberia solucionar ? Agradeço pela ajuda.
O erro é o seguinte:

classe DAO de teste (junit 4.5):
 package br.com.bb.agendaTelefonicaCompe.dao;
import br.com.bb.agendaTelefonicaCompe.entity.Empresa;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import static org.junit.Assert.*;
/** * * @author mud */
public class EmpresaDAOTest {
    public static Integer idOfEmpresa = 0;        public EmpresaDAOTest() {    }
    @BeforeClass    public static void setUpClass() throws Exception {    }
    @AfterClass    public static void tearDownClass() throws Exception {    }
    @Before    public void setUp() {    }
    @After    public void tearDown() {    }
    @Test    public void testAddEmpresa() throws Exception {        System.out.println("addEmpresa");        Empresa empresa = new Empresa();        empresa.setNome("BIOLAB");        empresa.setCnpj("000191");        empresa.setEndereco("RUA BETA 2");        empresa.setConta("12345");        empresa.setId_contato(22);        EmpresaDAO instance = new EmpresaDAO();        idOfEmpresa = instance.addEmpresa(empresa);        assertTrue (idOfEmpresa > 0);    }
    @Test    public void testGetEmpresa() throws Exception {        System.out.println("getEmpresa");        int idEmpresa = idOfEmpresa;        EmpresaDAO instance = new EmpresaDAO();        Integer expResult = idOfEmpresa;        Empresa result = instance.getEmpresa(idEmpresa);        assertEquals(expResult, result.getId());    }        @Test    public void testUpdateEmpresa() throws Exception {        System.out.println("updateEmpresa");        EmpresaDAO instance = new EmpresaDAO();        Empresa empresa = instance.getEmpresa(idOfEmpresa);        empresa.setNome("BIOLAB SA");        instance.updateEmpresa(empresa);        empresa = instance.getEmpresa(idOfEmpresa);        assertEquals(empresa.getNome(),"BIOLAB SA");    }            @Test    public void testRemoveEmpresa() throws Exception {        System.out.println("removeEmpresa");        EmpresaDAO instance = new EmpresaDAO();        instance.removeEmpresa(idOfEmpresa);            } } 

esta é a classe DAO:
/** * EmpresaDAO.java * * $Id$ * */package br.com.bb.agendaTelefonicaCompe.dao;
/** * * @author mud */
import br.com.bb.agendaTelefonicaCompe.entity.Empresa;import java.sql.ResultSet;import java.sql.SQLException;import java.util.LinkedList;import java.util.List;/** * * @author mud */public class EmpresaDAO extends GenericDAO {
    private static final long serialVersionUID = 1L;    public EmpresaDAO() {    }
    public int addEmpresa(Empresa empresa) throws SQLException {        empresa.setId(getNextId("EMPRESA"));        String query = "INSERT INTO APP.EMPRESA(ID,NOME,CNPJ,ENDERECO,CONTA,ID_CONTATO) values (?,?,?,?,?,?)";        executeCommand(query, empresa.getId(), empresa.getNome(), empresa.getCnpj(), empresa.getEndereco(),empresa.getConta(),empresa.getId_contato());        return empresa.getId();    }
    public void removeEmpresa(int idEmpresa) throws SQLException {        executeCommand("DELETE FROM APP.EMPRESA WHERE ID = ?", idEmpresa);    }
    public void updateEmpresa(Empresa empresa) throws SQLException {        String query = "UPDATE APP.EMPRESA SET NOME=?,CNPJ=?,ENDERECO=?,CONTA=?,ID_CONTATO=? WHERE ID = ?";        executeCommand(query, empresa.getNome(), empresa.getCnpj(), empresa.getEndereco(),empresa.getConta(),empresa.getId_contato(), empresa.getId());    }
    public Empresa getEmpresa (int idEmpresa) throws SQLException {        ResultSet rs = executeQuery("SELECT * FROM APP.EMPRESA WHERE ID = ?", idEmpresa);        Empresa empresa = null;        if (rs.next()) {            empresa = populateEmpresaInfo(rs);        }        rs.close();        return empresa;    }
    public List getAllEmpresas() throws SQLException {        ResultSet rs = executeQuery("SELECT * FROM APP.EMPRESA");        List toReturn = new LinkedList();        while (rs.next()) {            toReturn.add(populateEmpresaInfo(rs));        }        rs.close();        return toReturn;    }
    public static Empresa populateEmpresaInfo(ResultSet rs) throws SQLException {        Empresa toReturn = new Empresa();        toReturn.setId(rs.getInt("ID"));        toReturn.setNome(rs.getString("NOME"));        toReturn.setCnpj(rs.getString("CNPJ"));        toReturn.setEndereco(rs.getString("ENDERECO"));        toReturn.setConta(rs.getString("CONTA"));        //toReturn.setContato(ContatoDAO.getContato(rs.getInt("ID_CONTATO")));        return toReturn;    }}

esta é a classe GenericDAO:
/** * GenericDAO.java * * $Id$ * */package br.com.bb.agendaTelefonicaCompe.dao;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.logging.Level;import java.util.logging.Logger;
/** * * @author mud */public abstract class GenericDAO {        private static final long serialVersionU = 1L;
    public Connection getConnection(){        try {            Class.forName("org.apache.derby.jdbc.ClientDriver");            Connection cx = DriverManager.getConnection("jdbc:derby://localhost:1527/csaDB", "admin", "32716397");            return cx;        } catch (Exception ex) {            Logger.getLogger(GenericDAO.class.getName()).log(Level.SEVERE, null, ex);            return null;                }    }
    public Statement getStatement() throws SQLException {        return getConnection().createStatement();    }            public PreparedStatement getStatement(String st) throws SQLException {        return getConnection().prepareStatement(st);    }
public ResultSet executeQuery(String query, Object... params) throws SQLException {        PreparedStatement ps = getStatement(query);    for (int i = 0; i        ps.setObject(i+1, params[i]);      }    return ps.executeQuery();  }
public int executeCommand (String query, Object... params) throws SQLException {        PreparedStatement ps = getStatement(query);    for (int i = 0; i        try {        ps.setObject(i+1, params[i]);      } catch (Exception e) {          System.out.println("Error to try "+i+" with value "+params[i]);      }    }    int result = ps.executeUpdate();    ps.close();    return result;    }
public Integer getNextId (String tableName) throws SQLException {    ResultSet rs = executeQuery("select MAX(ID) from APP." + tableName);    rs.next();    Object result = rs.getObject(1);    if (result == null) {        rs.close();        return 1;    } else {        return ((Integer)result)+1;    }  }}
 
Jmarcel

Jmarcel

Curtidas 0

Respostas

Robson Teixeira

Robson Teixeira

04/02/2011

Olá Marcel
 
  pelo o que ta escrito na linha em vermelho da imagem diz que tem parametro não inicializado verifique isso as vezes pode ser 1 atributo da sua entidade verificar ok.

att
 robson passarella
GOSTEI 0
Jmarcel

Jmarcel

04/02/2011


Olá Marcel
 
  pelo o que ta escrito na linha em vermelho da imagem diz que tem parametro não inicializado verifique isso as vezes pode ser 1 atributo da sua entidade verificar ok.

att
 robson passarella

 
 

Desde já, obrigado pela atenção.
Entao, eu até consegui fazer o JUnit test do 'update' funcionar (que é o ñ estava passando), mas no caso tive que fazer um 'setAtributo' para todos os atributos, excluindo o setId (que é auto incremental e é a PK do BD). Isso indica que, futuramente, quando eu der um update na aplicação já pronta, não poderei fazer update em apenas um campo. Por ex, se eu quiser alterar apenas o nome de um registro, teria que fazer update nos demais atributos do registro (ou seja, alem do update nome, teria q fazer update tambem para todos os outros atributos do registro correspondente -> cnpj, endereco e conta. Mas gostariamos de alterar apenas o nome.
Agradeço se alguem puder ajudar.

GOSTEI 0
Dyego Carmo

Dyego Carmo

04/02/2011

Necessito do exception gerado no console "output" para analisar melhor...

Fico no aguardo !

GOSTEI 0
Davi Costa

Davi Costa

04/02/2011

O problema é que seu método de update, espera todos os valores:

public void updateEmpresa(Empresa empresa) throws SQLException {         String query = "UPDATE APP.EMPRESA SET NOME=?,CNPJ=?,ENDERECO=?,CONTA=?,ID_CONTATO=? WHERE ID = ?";         executeCommand(query, empresa.getNome(), empresa.getCnpj(), empresa.getEndereco(),empresa.getConta(),empresa.getId_contato(), empresa.getId());     }

então nenhum desses gets que vc chama deve estar null,
usando essa arquitetura que vc está usando é melhor criar um sql dinâmico, verificando se os getts estão nulos ou não.


Att Davi



GOSTEI 0
POSTAR