如果 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 注入的风险。
有时候,
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 注入的风险。