gpt4 book ai didi

java - 连接数据库的JUNIT测试用例

转载 作者:行者123 更新时间:2023-11-30 07:09:58 27 4
gpt4 key购买 nike

这是我测试 JDBC 连接的代码

package com.sybase;


public class SybaseDBConnection {

public static Properties prop = null;


public static Connection getConnection(String databaseType) {

Connection conn = null;
// Properties prop = null;
String database = null;
String driver = null;
String url = null;
String user = null;
String password = null;

try {
// prop = new Properties();
// prop.load(SybaseDBConnection.class.getClassLoader()
// .getResourceAsStream("com/properties/sybase.properties"));

database = prop.getProperty("sybase." + databaseType
+ ".databaseName");
driver = prop.getProperty("sybase." + databaseType
+ ".driverClassName");
url = prop.getProperty("sybase." + databaseType + ".url");
user = prop.getProperty("sybase." + databaseType + ".username");
password = prop.getProperty("sybase." + databaseType + ".password");

// String dbConUrl =
// "jdbc:datadirect:sqlserver://nt64sl2003a.americas.progress.comsql2008;Port=1433;DatabaseName=test;User=test;Password=test;EnableBulkLoad=true;BulkLoadBatchSize="
// + JDBC_BATCH_SIZE;

String dbConUrl = url + SEMI_COLLAN + "DatabaseName=" + database
+ SEMI_COLLAN + "User=" + user + SEMI_COLLAN + "Password="
+ password + SEMI_COLLAN + "EnableBulkLoad=true"
+ SEMI_COLLAN + "BulkLoadBatchSize=" + JDBC_BATCH_SIZE;

System.out.println("The URL is : " + dbConUrl);

SybDriver sybDriver = (SybDriver) Class.forName(driver)
.newInstance();
sybDriver.setVersion(com.sybase.jdbcx.SybDriver.VERSION_6);
DriverManager.registerDriver(sybDriver);
conn = DriverManager.getConnection(dbConUrl);
} catch (SQLException e) {
System.err.println("Exception occured : SQLException : "
+ e.getMessage());
e.printStackTrace();
} catch (InstantiationException e) {
System.err.println("Exception occured : InstantiationException : "
+ e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
System.err.println("Exception occured : IllegalAccessException : "
+ e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.err.println("Exception occured : ClassNotFoundException : "
+ e.getMessage());
e.printStackTrace();
}

return conn;
}

public static void closeConnection(Connection conn) {
try {
if (null != conn) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();

}
}

public static void closeResultset(ResultSet rs) {
try {
if (null != rs) {
rs.close();
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();

}
}

public static void closePreparedStatement(PreparedStatement pstmt) {
try {
if (null != pstmt) {
pstmt.close();
pstmt = null;
}
} catch (SQLException e) {
e.printStackTrace();

}
}

public static void closeStatement(Statement stmt) {
try {
if (null != stmt) {
stmt.close();
stmt = null;
}
} catch (SQLException e) {
e.printStackTrace();

}
}

public static String getProperty(String property) {
return prop.getProperty(property);
}

public static void main(String args[]) {
SybaseDBConnection.getConnection("ase");
}

}

我写了这个测试用例

public class SybaseStatementTest {

Connection conn;
Statement stmt;

// Setup methods
@BeforeClass
public void beforeClass() {
conn = null;
stmt = null;
}

// clean up method
@AfterClass
public void releaseResource() {
if (stmt != null) {
SybaseDBConnection.closeStatement(stmt);
}
if (conn != null) {
SybaseDBConnection.closeConnection(conn);
}
}


// Test case to check close statement using ASE database
@Before
public void openConnBeforerStmtTestASE() throws SQLException {
conn = SybaseDBConnection.getConnection("ase");
stmt = conn.createStatement();
}

@After
public void closeConnAfterStmtTestASE() {
if (conn != null) {
SybaseDBConnection.closeConnection(conn);
}
}

@Test
public void testCloseStatementASE() {
SybaseDBConnection.closeStatement(stmt);
Assert.assertNull("Error occured", stmt);
}
}

当我运行这个 Junit 测试用例时,我收到一个初始化错误(@BeforeClass 应该是静态的)。你能帮忙吗?

最佳答案

@BeforeClass@AfterClass 在类级别而非实例上运行,因此方法需要是静态的。

您可以删除 beforeClass 方法。它没有做任何有用的事情,因为实例变量无论如何都会默认为 null。并将 @AfterClass 更改为 @After

测试本身不会工作,因为 SybaseDBConnection.closeStatementstmt 设置为 null 但这在方法外部不可见,因为它是一个局部变量。

你可以这样写测试:

public class SybaseStatementTest {
Connection connection;

@Before
public void before() {
connection = SybaseDBConnection.getConnection("ase");
}

@After
public void after() {
SybaseDBConnection.closeConnection(connection);
}

@Test
public void closeStatementShouldCloseStatement() {
Statement statement = connection.createStatement();
SybaseDBConnection.closeStatement(statement);
assertTrue(statement.isClosed());
}

@Test
public void closeStatementWithNullShouldNotThrow() {
SybaseDBConnection.closeStatement(null);
}
}

关于java - 连接数据库的JUNIT测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com