java - SQL子查询没有返回任何值,但junit测试仍然通过

标签 java sql sql-server junit junit4

下面是我尝试在 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 循环,但测试仍然通过而不是失败。

最佳答案

The value I am using (this.Id) does not exist in the tlink, so the sub-query should return no record. (I.e. no record exists in tlink for that 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。

关于java - SQL子查询没有返回任何值,但junit测试仍然通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52906350/

相关文章:

java - 无法将 BufferedImage 绘制到另一个具有比例的 BufferedImage 中

sql - 在 postgres 表中添加检查,其中数据已经不正确

C# 如何更新datagridview中的数据

c# - 自动记录对数据库中记录所做的更改

java - Android - 如何持续监听 Fragment 类的静态变量变化?

java - Drools KieScanner——是否可以从可执行文件中加载settings.xml?

java - 比较两个映射的键并返回 boolean 值

php - MySQL说: #1194 - Table 'tablename' is marked as crashed and should be repaired

sql - 为什么你会使用 count ('foo' )?

sql - DB中的存储函数和 View 有什么区别?