Я предлагаю поддерживать единственную логическую переменную, которая отслеживает, прошел ли тест. Он будет инициализирован на 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.