我尝试通过以下方式测试SessionFactory是否有效:
assertFalse(sessionFactory.isClosed());
但即使底层数据源无法建立连接,我的测试也会通过:
java.sql.SQLException: Connections could not be acquired from the underlying database!
如何测试SessionFactory是否有效?
答案 0 :(得分:2)
好像你真的想测试你是否有有效的数据库连接。 SessionFactory
只是一个包装器,一旦配置完毕,只要基础DataSource
正常就可以使用。
那么你如何测试DataSource
?首先,各种连接池允许您定义所谓的测试查询。通常是"SELECT 1"
。如果您的数据库连接池没有公开这样的功能,只需从池中选择任何连接并运行类似的查询。
答案 1 :(得分:1)
这是我的测试代码在@Tomasz Nurkievicz回答后的样子:
@Test(description = "Test we can get the connection factory")
public void getApplicationSessionFactory() {
SessionFactory sessionFactory = null;
Session session = null;
try {
sessionFactory = createSessionFactory();
session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
assertFalse(connection.isClosed());
}
});
} finally {
if ( session != null ) {
session.close();
}
if (sessionFactory != null) {
sessionFactory.close();
}
}
}