Fórum JUnit Test no DAO #395103
04/02/2011
0
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
Curtir tópico
+ 0Posts
04/02/2011
Robson Teixeira
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
05/02/2011
Jmarcel
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
11/02/2011
Dyego Carmo
Fico no aguardo !
Gostei + 0
11/02/2011
Davi Costa
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
Clique aqui para fazer login e interagir na Comunidade :)