Подзапрос SQL не возвращает значения, но тест junit все еще проходит - PullRequest
0 голосов
/ 20 октября 2018

Ниже приведен подзапрос, который я пытаюсь использовать в тесте junit.

Код ниже, когда тест не пройден.

Используемое мной значение (this.Id) не существует в tlink, поэтому подзапрос не должен возвращать запись.(Т.е. в tlink нет записи для этого extId)

Но тест все еще проходит.

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

Кто-нибудь знает, почему этот метод не работает?Кроме того, System.out не отображается, поэтому он фактически не входит в цикл while, но тест все равно проходит, а не завершается.

1 Ответ

0 голосов
/ 20 октября 2018

Используемое мной значение (this.Id) не существует в tlink, поэтому подзапрос не должен возвращать запись.(Т. Е. В tlink для этого extId не существует записи)

Используемый вами запрос:

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

(Примечание: настоятельно рекомендуется использовать параметры, а не разбирать строку запроса.)

Этот запрос всегда будет возвращать ровно одну строку (если нет ошибки, которую следует проверять, особенно для теста аудита).Если ничто не соответствует предложению where, тогда total будет 0.

Это объясняет, почему fail() не вызывается - это противоречит вашему утверждению в вопросе.

Почему assert() не выходит из строя?Ну, вы уже проверили на первую запись, так что я думаю, что она переходит на вторую.Следовательно, цикл while не вызывается.Вам нужно просто один раз найти возвращаемое значение и проверить, равно ли оно 0.

...