Я спрашиваю, потому что ВСЕ примеры, которые я нахожу в Google, одинаковы из учебника Fitnesse: очень простой запрос к списку или массиву в памяти, НЕ РЕАЛЬНАЯ БД.
Да, Fixtures никогдаприходится иметь дело с этим, но как я должен проверить свои приборы, если я даже не могу установить соединение с БД в симуляции «API»?
То, что я пытаюсь симулировать, этовызов из приспособления FitNesse для запроса в Java в базу данных / таблицу PostgreSQL.В этом простом примере я пытаюсь получить хотя бы один столбец из одной строки в одной таблице.Когда я выполняю код, он работает совершенно самостоятельно.Проблема в том, что при попытке выполнить от Fitnesse через крепеж.При вызове драйвера JDBC всегда происходит сбой ClassNotFoundException.Этого не происходит, если запустить собственный код.
Вот код, выполняющий запрос:
package queriespackage;
import java.sql.*;
public class testQuery01 {
public static Connection openDBConnection(){
Connection connectionString = null;
try {
String dbhost = "SOMEURL";//Redacted
String port = "SOMEPORT";//Redacted
String dbname = "THEDBNAME";//Redacted
String username = "SOMEUSER";//Redacted
String password = "SOMEPASSWORD";//Redacted
String driverJDBC = "org.postgresql.Driver";
Class.forName(driverJDBC);
connectionString = DriverManager.getConnection("jdbc:postgresql://" + dbhost + ":" + port + "/" + dbname,username,password);
connectionString.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace(System.err);
System.exit(0);
} catch (Exception e) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
};
return connectionString;
};
public static ResultSet executeQuery(Connection connectionString, int intAccountId) throws SQLException{
Statement querySession = connectionString.createStatement();
//The query string
String queryString = "SELECT DISTINCT "
+ "account_search.account_id,"
+ "account_search.account_name"
+ " FROM account_search "
+ " WHERE"
+ " account_search.account_id = "+ intAccountId
+ "LIMIT 1";
ResultSet queryResult = querySession.executeQuery(queryString);
return queryResult;
};
public static String processQueryResult(ResultSet queryResult) throws SQLException{
String strQueryValueReturned = null;
while (queryResult.next()) {
strQueryValueReturned = queryResult.getString("account_name");
};
return strQueryValueReturned;
};
public static boolean closeDBConnection(Connection connectionString){
try {
if(connectionString!=null){
connectionString.close();
}
} catch (SQLException e) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
};
return true;
};
public static String testQuery(int intAccountId) throws SQLException, ClassNotFoundException{
boolean bolConnectionStatus = false;
String strValueReturned = null;
Connection connectionString = openDBConnection();
if(connectionString != null){
ResultSet qryQueryResult = executeQuery(connectionString, intAccountId);
strValueReturned = processQueryResult(qryQueryResult);
bolConnectionStatus = closeDBConnection(connectionString);
if(!bolConnectionStatus){
System.exit(0);
}
}else{
System.exit(0);
};
return strValueReturned;
};
};
Если я добавлю метод Main в этот код, передам егоЗначение аргумента для " intAccountId ", оно успешно возвращает имя учетной записи " account_name ", как и ожидалось.
Теперь вот Fixture, который должен вызыватьсятест FitNesse:
package fixturespackage;
import java.sql.SQLException;
import queriespackage.testQuery01;
public class testFixture01{
private int Int_AccountId;
//Fixture Constructor (setter)
public testFixture01(int Int_AccountId){
this.Int_AccountId = Int_AccountId;
};
public String query() throws SQLException, ClassNotFoundException{
return testQuery01.testQuery(Int_AccountId);
};
};
Так же, как говорится в руководстве FitNesse, должен существовать метод «query», который выполняет фактический вызов интерфейса в БД.Мне пришлось добавить конструктор вместо «setter», потому что FitNesse фактически требует этого: « Не удалось вызвать конструктор для fixturepackage.testFixture01 »
Вот страница FitNesse:
!***> System Variables
!define TEST_SYSTEM {slim}
!path C:\FitnessTest\bin
*!
|Query: fixturespackage.testFixture01|21 |
|Str_AccountName |
|SomeName |
Вот скриншот моего BuildPath, так что вы можете видеть, что у меня есть библиотека JDBC для Java 8, JDK 1.8, JRE 1.8 ... и "org.postgresql.Driver.class" включен в проект.

Это ошибка, которую я получаю при запуске из FitNesse:

Это ошибка, которую я получаю при отладке строки, в которой FitNesse не удалось выполнить с помощью инструмента проверки:

... и YES,Я также пытался жестко запрограммировать имя JDBC:

Я много искал РЕАЛЬНУЮ ЖИЗНЬ, как здесь, так и в Руководстве по FitNesse.и Google.
Руководство FitNesse может быть обширным, но давайте будем искренними, оно полно "грязного слова здесь", нереально и не соответствуетПримеры и упущение большого количества информации.
Итак, если спросить еще раз, проводил ли кто-нибудь тест НАСТОЯЩУЮ ЖИЗНЬ, выполняя запросы с использованием FitNesse, это могло бы помочь мне выяснить, что я делаю неправильно?