Java JUnit测试仍在通过,即使sql查询不应返回任何记录
我正在编写查询SQL Server数据库的Cumber测试 下面的查询应该失败,因为该记录在表中不存在。但是,测试通过了Java JUnit测试仍在通过,即使sql查询不应返回任何记录,java,sql,junit,cucumber,junit4,Java,Sql,Junit,Cucumber,Junit4,我正在编写查询SQL Server数据库的Cumber测试 下面的查询应该失败,因为该记录在表中不存在。但是,测试通过了 try { Class.forName(JDBC_DRIVER); System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); System.out.pri
try {
Class.forName(JDBC_DRIVER);
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
System.out.println("Connected database successfully...");
stmt = conn.createStatement();
String sql = "SELECT id FROM tclientlink WHERE id = '0000060115123'";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("goald_client_id");
System.out.print("ID IS HERE: " + id);
assertEquals(60115, id);
}
rs.close();
} catch(SQLException se) {
se.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(stmt!=null) stmt.close();
} catch(SQLException se2) {
}
try {
if(conn!=null) conn.close();
} catch(SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
在以下行中有NullPointerException:
int id = rs.getInt("goald_client_id");
它转到异常块,只需在所有异常块中添加以下语句
assertEquals(true, false);
您的while循环没有执行,因为resultset中没有记录,并且默认情况下通过了测试用例, 请做以下更改
while(rs.next()) {
int id = rs.getInt("goald_client_id");
System.out.print("ID IS HERE: " + id);
assertEquals(60115, id);
}
将上述代码更改为
int noOfRecords = 0;
while(rs.next()) {
int id = rs.getInt("goald_client_id");
System.out.print("ID IS HERE: " + id);
assertEquals(60115, id);
noOfRecords ++;
}
if( noOfRecords == 0 ) {
assertEquals(true, false);
}
您的查询结果是什么?@YitianZhang嗨,我已经添加了上面应该失败的代码。因此,这种方法应该在上面失败。您可以看到我添加的sys.out,但下面的详细信息是记录到控制台的唯一详细信息:连接到数据库。。。已成功连接数据库。。。再见如果表中不存在该记录,则resultset将为空,这意味着assertEquals60115,id;永远不会被处决。@ThomasKläger嗨,好的,谢谢你。如果结果集为空,我需要对代码进行哪些更改以使其失败?如果没有找到任何内容,则应该失败,那么您可以用一个简单的检查替换while rs.next{…}循环:if!rs.next{failNo data found;}我已经将此添加到所有catch语句中,但测试仍然通过