Erro ao testar a classe Usuario

Java

23/04/2011

Colegas tenho os seguintes códigos:



Codigo da classe GenericDAO (classe de Conexão)  public ResultSet ExecuteQuery(String query,Object...params) throws SQLException{                 PreparedStatement ps = getStatement(query);         for (int i = 0; i < params.length; i++) {             ps.setObject(i+1, params[i]);         }         return ps.executeQuery();            }
Codigo da classe UsuaarioDAO public int adicionarUsuario(Usuario usr) throws SQLException{                       String sql = "insert into usuario(nome,login,senha) values(?,?,?)";                   ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());             return usr.getId();     }
// Código da classe que do JUnit, para fazer teste public int adicionarUsuario(Usuario usr) throws SQLException{                       String sql = "insert into usuario(nome,login,senha) values(?,?,?)";                   ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());             return usr.getId();     }



Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
    at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
    at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
    at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
    at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)


Alguem poderia me dar uma ajuda por favor?


Nilo Souza

Nilo Souza

Curtidas 0

Respostas

Nilo Souza

Nilo Souza

23/04/2011

Colegas tenho os seguintes códigos:



Codigo da classe GenericDAO (classe de Conexão)  public ResultSet ExecuteQuery(String query,Object...params) throws SQLException{                 PreparedStatement ps = getStatement(query);         for (int i = 0; i < params.length; i++) {             ps.setObject(i+1, params[i]);         }         return ps.executeQuery();            }
Codigo da classe UsuaarioDAO public int adicionarUsuario(Usuario usr) throws SQLException{                       String sql = "insert into usuario(nome,login,senha) values(?,?,?)";                   ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());             return usr.getId();     }
// Código da classe que do JUnit, para fazer teste @Test     public void testAdicionarUsuario() throws SQLException {         System.out.println("adicionarUsuario");         Usuario usr = new Usuario();         usr.setNome("Nilo");         usr.setLogin("nsouza");         usr.setSenha("123");         UsuarioDAO instance = new UsuarioDAO();         idOfUser = instance.adicionarUsuario(usr);         Usuario result = instance.getUser(idOfUser);         assertEquals(idOfUser, result.getId());         }



Ao teste essa classe recebo a seguinte mensagem:
------------- Standard Error -----------------
23/04/2011 13:36:18 treinamento.DAO.UsuarioDAO adicionarUsuario
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: No resultset for sql
    at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:166)
    at treinamento.DAO.GenericaDAO.ExecuteQuery(GenericaDAO.java:54)
    at treinamento.DAO.UsuarioDAO.adicionarUsuario(UsuarioDAO.java:50)
    at treinamento.DAO.UsuarioDAOTest.testAdicionarUsuario(UsuarioDAOTest.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)


Alguem poderia me dar uma ajuda por favor?


GOSTEI 0
Davi Costa

Davi Costa

23/04/2011

Vc está adicionando um item e não realizando uma consulta, por isso não retorna ResultSet. Se vc troca seu insert por um select perceberá que não dará mais esse erro.

Em nenhum momento nesse trecho de código:

public int adicionarUsuario(Usuario usr) throws SQLException{          
            String sql = "insert into usuario(nome,login,senha) values(?,?,?)";      
            ExecuteQuery(sql, usr.getNome(),usr.getLogin(),usr.getSenha());
            return usr.getId();
    }

@Test
    public void testAdicionarUsuario() throws SQLException {
        System.out.println("adicionarUsuario");
        Usuario usr = new Usuario();
        usr.setNome("Nilo");
        usr.setLogin("nsouza");
        usr.setSenha("123");
        UsuarioDAO instance = new UsuarioDAO();
        idOfUser = instance.adicionarUsuario(usr);
        Usuario result = instance.getUser(idOfUser);
        assertEquals(idOfUser, result.getId());
   
    }

Vc adicionou um id para o Usuario usr, não é JPA que através do mapeamento vai pegar o id do seu banco.
Mas p PreparedStatement tem um método que talvez possa te ajudar.

ps.executeUpdate(sql, autoGeneratedKeys);

Espero ter ajudado, só para finalizar para vc dar um insert use somente execute(), ele retorna um boolean, que talvez vc possa usar no seu teste é bom ver a documentação para ver em que situação ele te retorna true ou false.

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

23/04/2011

E ai deu certo? Algum feedBack?

Caso tenha resolvido favor fechar pendência.

Att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

23/04/2011

Resolvido ?

Se sim , por favor feche o chamado :)
GOSTEI 0
Nilo Souza

Nilo Souza

23/04/2011

Não resolvi, assim que voltar respondo.
volto amanha.
GOSTEI 0
Nilo Souza

Nilo Souza

23/04/2011

Ola, já estou em casa. Na verdade não resolveu. Abaixo toda a minha classe de teste para ajudar na compreensão do que fiz. Obrigado desde já pela ajuda!

 

package treinamento.DAO;

import com.sun.xml.internal.ws.wsdl.writer.UsingAddressing;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
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.*;
import treinamento.entidade.Usuario;

/**
 *
 * @author nsouza
 */
public class UsuarioDAOTest {
    
     public static Integer idOfUser = 0;
    
    public UsuarioDAOTest() {
    }

    @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 testGetUser() throws Exception {
        System.out.println("getUser");
        int IdUser = idOfUser;
        UsuarioDAO instance = new UsuarioDAO();
        Integer expResult = idOfUser;
        Usuario result = instance.getUser(IdUser);
        assertEquals(expResult, result.getId());       
    }
    
    @Test
    public void testAdicionarUsuario() throws SQLException {
        System.out.println("adicionarUsuario");
        Usuario usr = new Usuario();
        usr.setNome("Nilo");
        usr.setLogin("nsouza");
        usr.setSenha("123");
        UsuarioDAO instance = new UsuarioDAO();
        idOfUser = instance.adicionarUsuario(usr);
        Usuario result = instance.getUser(idOfUser);
        assertEquals(idOfUser, result.getId());
    
    }
    
    //@Test
    public void testValidarUsuarioSenha() {
        System.out.println("validarUsuarioSenha");
        String usuario = "";
        String senha = "";
        UsuarioDAO instance = new UsuarioDAO();
        boolean expResult = false;
        boolean result = instance.validarUsuarioSenha(usuario, senha);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }
    
    
    //@Test
    public void testRemoveUsuario() {
        System.out.println("removeUsuario");
        int idUser = 0;
        UsuarioDAO instance = new UsuarioDAO();
        instance.removeUsuario(idUser);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }
 
   

    /*
     * @Test
    public void testGetUser() throws Exception {
        System.out.println("getUser");
        int idUser = idOfUser;
        UserDAO instance = new UserDAO();
        Integer expResult = idOfUser;
        User result = instance.getUser(idUser);
        assertEquals(expResult, result.getId());
    } 
     */
   // @Test
    public void testAtualizaUsuario() {
        System.out.println("atualizaUsuario");
        Usuario User = null;
        UsuarioDAO instance = new UsuarioDAO();
        instance.atualizaUsuario(User);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    

    /**
     * Test of getAllUsers method, of class UsuarioDAO.
     */
   // @Test
    public void testGetAllUsers() throws Exception {
        System.out.println("getAllUsers");
        UsuarioDAO instance = new UsuarioDAO();
        List expResult = null;
        List result = instance.getAllUsers();
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

    /**
     * Test of populateUserInfo method, of class UsuarioDAO.
     */
   // @Test
    public void testPopulateUserInfo() throws Exception {
        System.out.println("populateUserInfo");
        ResultSet rs = null;
        Usuario expResult = null;
        Usuario result = UsuarioDAO.populateUserInfo(rs);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }
}


GOSTEI 0
POSTAR