SQL Unterabfrage zurückkehr keinen Wert, aber JUnit-Test noch vergeht

stimmen
0

Nachfolgend finden Sie eine Unterabfrage, die ich in einem JUnit-Test zu verwenden, versuchen.

Der Code unten ist vorbei, wenn der Test nicht bestehen sollte.

Der Wert Ich verwende (this.Id) existiert nicht in der tlink, so dass die Unter Abfrage sollte keine Aufzeichnungen zurück. (Dh kein Datensatz existiert in tlink für diesen EXTID)

Aber wird der Test vorbei noch.

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);
        } 
    } 

Weiß jemand, warum diese Methode nicht funktioniert? Auch wird die System.out nicht angezeigt wird, so ist es nicht wirklich gehen in die while-Schleife, aber der Test noch vergeht nicht scheitern.

Veröffentlicht am 20/10/2018 um 12:46
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Der Wert Ich verwende (this.Id) existiert nicht in der tlink, so dass die Unter Abfrage sollte keine Aufzeichnungen zurück. (Dh kein Datensatz existiert in tlink für diesen EXTID)

Die Abfrage, die Sie verwenden, ist:

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

(Hinweis: Parameter sind eher zu empfehlen als munging einen Abfrage-String.)

Diese Abfrage wird immer geht auf genau eine Zeile zurückgeben (es sei denn , es ist ein Fehler, die Sie checken sollten, insbesondere für einen Audit - Test). Wenn nichts , um die Spiele - whereKlausel, dann totalwird sein 0.

Das erklärt , warum fail()wird nicht aufgerufen wird - ein Ihre Aussage in der Frage widerspricht.

Warum nicht die assert()scheitern? Nun, Sie überprüft bereits für den ersten Datensatz, so dass ich denke , dass es auf die zweite bewegt. Daher ist die whileschlaufen nicht genannt zu werden. Sie sollten nur einmal den einzelnen Rückgabewert schauen und prüfen , ob es 0 ist.

Beantwortet am 20/10/2018 um 12:49
quelle vom benutzer

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