如果 while(resultset.next()) returns false,如何使 testng 脚本失败?

How to fail the testng script if while(resultset.next()) returns false?

有时候,

dbResultSetSalary.next()

return 我的查询没有任何值,这是错误的。在那种情况下,如何使 testng 脚本失败?

下面是我的代码:-

import java.sql.ResultSet;
import org.testng.annotations.Test;

public class Test21 {

    static ResultSet dbResultSetEmployeeID;
    static ResultSet dbResultSetSalary;

    @Test
    public void dbTest() throws Exception {
        DataBaseUtil conn = new DataBaseUtil();
        conn.EstablishConnection("ORACLE");
        dbResultSetEmployeeID = conn.executeQuery("SELECT * FROM EMPLOYEE WHERE EMPLOYEE_NAME = 'Whosebug'");
            while(dbResultSetEmployeeID.next()) {
                String id = dbResultSetEmployeeID.getString("EMP_ID");
                dbResultSetSalary = conn.executeQuery("SELECT * FROM SALARY WHERE EMP_ID = '"+id+"'");
                while(dbResultSetSalary.next()) {
                    String val = dbResultSetSalary.getString("VAL");
                    System.out.println(val);
                    assertEquals("23400", val)
                }
            }
        }
}

我是使用 oracle 进行数据库连接的新手。需要对此有所了解。

您可以使用 hasNext():

if(!dbResultSetSalary.hasNext())
  throw new MyException("You are lying")

如果您想检查该值,则:

if(val==null or whatever)
  throw new MyException("You are lying for the second time")

我建议维护一个布尔变量来跟踪测试是否通过。它将被初始化为 false,并且只有在使用正确的值成功完成查询后才会设置为真。

@Test
public void dbTest() throws Exception {
    boolean success = false; // added here

    DataBaseUtil conn = new DataBaseUtil();
    conn.EstablishConnection("ORACLE");
    String sqlName = "SELECT * FROM EMPLOYEE WHERE EMPLOYEE_NAME = 'Whosebug'";
    dbResultSetEmployeeID = conn.executeQuery(sqlName);
    while (dbResultSetEmployeeID.next()) {
        String id = dbResultSetEmployeeID.getString("EMP_ID");
        String sqlSalary = "SELECT * FROM SALARY WHERE EMP_ID = '" + id + "'";
        dbResultSetSalary = conn.executeQuery(sqlSalary);
        if (dbResultSetSalary.next()) {
            String val = dbResultSetSalary.getString("VAL");
            System.out.println(val);
            assertEquals("23400", val);
            success = true;
        }
    }

    // JUnit will interpret an exception as a test failure

    if (!success) {
        throw new Exception("Test failed.");
    }
}

备注:

你实际上是运行这里的集成测试,而不是单元测试,因为你的测试结果不仅仅取决于代码功能单元,它还取决于您的实际数据库是否正常工作。

您的一个 SQL 查询是使用字符串连接构建的。这通常容易发生 SQL 注入,但由于您控制着其中的值,因此理论上没有 SQL 注入的风险。