Java 有人做过FitNesse测试来查询真实的数据库吗?我能';t使Fitnesse连接成功
我这样问是因为我在谷歌找到的所有例子都和Fitnesse教程中的一样:对内存中的列表或数组的非常简单的查询,而不是真正的数据库 是的,fixture永远不需要处理这个问题,但是如果我甚至不能在模拟“API”的过程中连接到DB,我该如何测试我的fixture呢 我试图模拟的是FitNesse Fixture调用Java查询PostgreSQL数据库/表。在这个简单的示例中,我试图从一个表中的一行中至少获取一列。当我执行代码时,它自己就可以完美地运行。问题是当试图通过夹具从Fitnesse执行时。调用JDBC驱动程序时,它总是失败,并出现ClassNotFoundException。这不是通过自己运行代码来实现的 以下是执行查询的代码:Java 有人做过FitNesse测试来查询真实的数据库吗?我能';t使Fitnesse连接成功,java,postgresql,fitnesse,Java,Postgresql,Fitnesse,我这样问是因为我在谷歌找到的所有例子都和Fitnesse教程中的一样:对内存中的列表或数组的非常简单的查询,而不是真正的数据库 是的,fixture永远不需要处理这个问题,但是如果我甚至不能在模拟“API”的过程中连接到DB,我该如何测试我的fixture呢 我试图模拟的是FitNesse Fixture调用Java查询PostgreSQL数据库/表。在这个简单的示例中,我试图从一个表中的一行中至少获取一列。当我执行代码时,它自己就可以完美地运行。问题是当试图通过夹具从Fitnesse执行时。调
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方法,并将“intaccounted”的参数值传递给它,它将成功地返回帐户名“account\u name”,正如预期的那样
下面是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指南所说,必须有一个“查询”方法,它对数据库中的接口进行实际调用。我不得不添加一个构造函数而不是“setter”,因为FitNesse实际上要求它:“无法为fixturepackage.testFixture01调用构造函数”
以下是FitNesse页面:
!***> System Variables
!define TEST_SYSTEM {slim}
!path C:\FitnessTest\bin
*!
|Query: fixturespackage.testFixture01|21 |
|Str_AccountName |
|SomeName |
这是我的构建路径的屏幕截图,所以你可以看到我有用于Java8、JDK1.8、JRE1.8的JDBC库。。。“org.postgresql.Driver.class”包含在项目中
这是我从FitNesse运行时收到的错误:
这是我在使用Inspect tool调试FitNesse失败的线路时遇到的错误:
。。。是的,我也尝试过硬编码JDBC的名称:
我在这里搜索了很多关于现实生活的例子,《FitNesse指南》和谷歌
FitNesse指南可能内容广泛,但让我们真诚地说,它充满了“脏话”,不切实际和不完整的例子,并且遗漏了很多信息
那么,再问一次,有没有人使用FitNesse进行过真实的查询测试,这可以帮助我找出我做错了什么?我必须承认,我只使用FitNesse进行了有限的数据库测试,但我使用了它们(查询DB2)。 我没有使用查询表(或编写自己的fixture进行查询),而是与脚本表和场景结合使用 无法找到驱动程序类这一事实表明,尽管jar存在于IDE的类路径上,但当FitNesse运行fixture代码时,它不可用 我注意到您将类路径指定为wiki中的单个目录。在Java中,这意味着所有类文件都应该位于该目录中(作为.class文件,位于其定义包的右子目录中)。它不会拾取该目录中的任何jar(或zip)。您是否将数据库驱动程序的jar解压缩到该目录?如果没有,您需要添加一个
!path
一行,用数据库驱动程序指向jar(因此整个路径包括文件名)
现在,列出您需要的每个jar可能很快变得麻烦,所以您也可以使用通配符。我倾向于将所有需要的JAR复制到一个目录中,该目录也包含fixture.class文件,并添加一个!path
line加载该目录中的所有jar。
因此,如果您还将数据库驱动程序复制到您所问的目录中,您可以确保它和您自己的设备通过
!path C:\FitnessTest\bin
!path C:\FitnessTest\bin\*.jar
我必须承认,我只使用FitNesse进行了有限的数据库测试,但我使用了它们(查询DB2)。 我没有使用查询表(或编写自己的fixture进行查询),而是与脚本表和场景结合使用 无法找到驱动程序类这一事实表明,尽管jar存在于IDE的类路径上,但当FitNesse运行fixture代码时,它不可用 我注意到您将类路径指定为wiki中的单个目录。在Java中,这意味着所有类文件都应该位于该目录中(作为.class文件,位于其定义包的右子目录中)。它不会拾取该目录中的任何jar(或zip)。您是否将数据库驱动程序的jar解压缩到该目录?如果没有,您需要添加一个
!path
一行,用数据库驱动程序指向jar(因此整个路径包括文件名)
现在,列出您需要的每个jar可能很快变得麻烦,所以您也可以使用通配符。我倾向于将所有需要的JAR复制到一个目录中,该目录也包含fixture.class文件,并添加一个!path
line加载该目录中的所有jar。
因此,如果您还将数据库驱动程序复制到您所问的目录中,您可以确保它和您自己的设备通过
!path C:\FitnessTest\bin
!path C:\FitnessTest\bin\*.jar
顺便说一句:屏幕截图引用了一个不同的包名,这是一个模拟名。真实的代码与我发布的代码相匹配。请将您的问题(及其标题)重新表述为“有人做过真实生活的测试吗?提出疑问”不是一个好问题(它是否与能够回答的“真实生活”无关)。你的问题应该集中在你的问题上,而不是某人是否能帮助你(如果他们能,他们会回答)。请参阅:。顺便说一句:屏幕截图引用了另一个包名,这是一个模拟名。真实的代码与我发布的代码相匹配。请将您的问题(及其标题)重新表述为“有人做过真实生活的测试吗?提出疑问”不是一个好问题(它是否与能够回答的“真实生活”无关)。你的问题应该集中在你的问题上,而不是某人是否能帮助你(如果他们能,他们会回答)。请看:。谢谢你,伙计!