Testes unitários com JUnit e PostgreSQL

Galera, estou tendo um erro aqui num teste unitário que não tou entendendo por que … vou mandar pra vocês todo o código relacionado e a mensagem de erro que recebo no teste unitário.

Esse primeiro método verifica se o nome de usuário já existe no banco de dados.

 protected boolean verificaNomeUsuario(String nomeUs) {
        conectar();
        try {

            java.sql.Statement st = con.createStatement();
            String SQL = "SELECT nomeusuario FROM caronista WHERE nomeusuario = " + "'"+nomeUs+"'";
            ResultSet rs = st.executeQuery(SQL);
            rs.next();
            String nome = rs.getString("nomeusuario");
            if ( ! nomeUs.equals(nome))return true;
            else return false;
            
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }


    }

Este aqui é o teste que estou tentando fazer.

/**
     * Cria um caronista com todos os valores válidos, insere no Banco de Dados
     * Depois, busca o caronista inserido pelo cpf.
     * Se retornar exatamente o mesmo objeto o teste foi realizado com sucesso
     */
public void testCreateCaronistaPerfeito() throws Exception {
        System.out.println("createCaronista");
        Caronista c = new Caronista();

        c.setCampusOrigem("uruguaiana");
        c.setCpf("14236867133");
        c.setDataNascimento("12/10/1990");
        c.setEmail("email@exemplo.com");
        c.setMatricula("89281");
        c.setNomeCompleto("Carlos Eduardo");
        c.setNomeUsuario("carloseduardo");
        c.setSenha("Senha@Test123");



        AuxCaronista instance = new AuxCaronista();
        instance.createCaronista(c);

        Caronista compara = instance.retornaCaronista("14236867133");

        assertEquals(compara, c);
    }

O erro que me retorna é que sempre ja há um usuário com esse nome, por mais que não haja, inclusive já fiz milhares de consultas no banco e tenho certeza que não tem nada lá. Por via das duvidas, enviarei a classe de adição de caronista no BD e de busca tbm.

Esse aqui é o que adiciona.


public boolean insertCaronista(Caronista c) {


        try {
            Connection con = confac.criaConexao();

            AdicionaPessoa = con.prepareStatement("INSERT INTO caronista "
                    + "( nomecompleto , nomeusuario , senha , email , cpf , matricula , "
                    + " campusorigem , datanascimento ) " + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )");


            AdicionaPessoa.setString(1, c.getNomeCompleto());
            AdicionaPessoa.setString(2, c.getNomeUsuario());
            AdicionaPessoa.setString(3, c.getSenha());
            AdicionaPessoa.setString(4, c.getEmail());
            AdicionaPessoa.setString(5, c.getCpf());
            AdicionaPessoa.setString(6, c.getMatricula());
            AdicionaPessoa.setString(7, c.getCampusOrigem());
            AdicionaPessoa.setDate(8, converteData(c.getDataNascimento()));
            result = AdicionaPessoa.executeUpdate();

            if (result == 0) {
                System.out.println("não alterou nada");
            }

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

e este o que busca:

 public Caronista returnCaronista(String cpf) throws ValoresIlegaisException {
        try {
            Caronista c = null;
            Connection con = confac.criaConexao();

            String SQL = "SELECT * FROM caronista WHERE cpf = " + cpf;
            java.sql.Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(SQL);


            c.setNomeCompleto(rs.getString("nomecompleto"));
            c.setNomeUsuario(rs.getString("nomeusuario"));
            c.setCampusOrigem(rs.getString("campusorigem"));
            c.setDataNascimento(rs.getString("datanascimento"));
            c.setEmail(rs.getString("email"));
            c.setMatricula(rs.getString("matricula"));
            c.setSenha(rs.getString("senha"));
            c.setCpf(cpf);
            return c;

        } catch (SQLException ex) {
            Logger.getLogger(DBCaronista.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

Ps. estou entrando em desespero já x.x

Obrigado pela atenção.

Claudio.

poste o errro tambem para podermos dar uma olhada e se localizarmos melhor…

Não tem código de erro, só diz que o teste falhou e que o caronista já é existente.

vou colocar mais o set aqui que é onde chama o método de verificação, talvez ajude

 public void setNomeUsuario(String nomeUsuario) throws ValoresIlegaisException {
        if (verificaNomeUsuario(nomeUsuario)) {
            this.nomeUsuario = nomeUsuario;
        } else {
            String erro = "Usuário já existente";
            throw new ValoresIlegaisException(erro);
        }

Ps. parece que cai sempre no else

Cai no else porque no teu método verificaNomeUsuario, quando não existe nenhum e fazes isto

 String nome = rs.getString("nomeusuario");  

vais ter uma excepção porque o resultset não tem dados. E com isto vai para o catch e tens o return null.

E depois, para que comparar se já sabes que se retornar tem de ser igual?
O que tu queres é simplesmente:

return !rs.next(); 

Finalmente NUNCA uses statements com concatenação de parametros e '. Usa antes PreparedStatement. Para tentares perceber porquê, cria um utilizador com o nome Joana d’Arc da forma que tu tens e depois com PreparedStatement. Ou então um com o nome [color=red] '; DROP table caronista;– [/color]

Entendi cara, valeu (: vou dar uma corrigida.