SQL Sub consulta retornar nenhum valor, mas teste JUnit ainda está passando

votos
0

Abaixo está uma sub-consulta que eu estou tentando usar em um teste JUnit.

O código abaixo está passando, quando o teste deve estar falhando.

O valor Eu estou usando (this.Id) não existe no TLINK, então a sub-consulta deve retornar nenhum registro. (Ou seja, não existe na ficha TLINK para que extid)

Mas, o teste ainda está passando.

try {
        dbAccessSetUp();
        ResultSet rs = stmt.executeQuery(SELECT count(*) as total FROM taddress WHERE address_id = (SELECT address_id FROM tlink WHERE ext_id = + this.ID + ));

        if(!rs.next()) {
            fail(Record does not exist in taddress);
        }
        int count = 0;
        while(rs.next()) {              
            count = rs.getInt(1);
            System.out.println(number of count :  + count);
            assertTrue(0 < count);
        } 
        rs.close(); 
    } catch(SQLException se) { 
        se.printStackTrace(); 
        assertEquals(true, false);
    } catch(Exception e) { 
        e.printStackTrace();
        assertEquals(true, false);
    } finally { 
        try { 
            if(stmt!=null) stmt.close();  
        } catch(SQLException se2) {
            assertEquals(true, false);
        } 
        try { 
            if(conn!=null) conn.close(); 
        } catch(SQLException se) {
            se.printStackTrace(); 
            assertEquals(true, false);
        } 
    } 

Alguém sabe por que este método não está funcionando? Além disso, o System.out não está sendo exibido, por isso não é realmente indo para o loop while, mas o teste ainda está passando ao invés de falhar.

Publicado 20/10/2018 em 13:46
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

O valor Eu estou usando (this.Id) não existe no TLINK, então a sub-consulta deve retornar nenhum registro. (Ou seja, não existe na ficha TLINK para que extid)

A consulta que você está usando é:

SELECT count(*) as total
FROM taddress
WHERE address_id = (SELECT address_id FROM tlink WHERE ext_id =" + this.ID + ")")

(Observação: Os parâmetros são altamente recomendados em vez de munging uma seqüência de consulta.)

Esta consulta é sempre vai retornar exatamente uma linha (a menos que haja um erro, que você deve verificar para, especialmente para um teste de auditoria). Se nada coincide com a wherecláusula, então totalserá 0.

Isso explica por que fail()não está sendo chamado - um contradiz sua declaração na pergunta.

Por que não a assert()falhar? Bem, você já marcada para o primeiro registro, então eu acho que ele está se movendo para a segunda. Assim, o whileloop não está sendo chamado. Você deve apenas olhar para cima o valor único devolvido, uma vez e verificar se ele é 0.

Respondeu 20/10/2018 em 13:49
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more