Как завершить выполнение сценария testng, если while (resultset.next ()) возвращает false? - PullRequest
0 голосов
/ 08 октября 2019

Иногда

dbResultSetSalary.next ()

не возвращает никакого значения для моего запроса, что неверно. В таком случае, как завершить работу сценария 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 = 'StackOverFlow'");
            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)
                }
            }
        }
}

Я новичок в подключении к БД, используя оракул. нужно немного разобраться в этом.

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Я предлагаю поддерживать единственную логическую переменную, которая отслеживает, прошел ли тест. Он будет инициализирован на false и будет установлен в true только после успешного выполнения запроса с правильным значением.

@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 = 'StackOverFlow'";
    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.

1 голос
/ 08 октября 2019

Вы можете использовать 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")
...