我试图通过以下方式测试 SessionFactory 是否有效:
assertFalse(sessionFactory.isClosed());
但即使底层数据源无法获得连接,我的测试也会通过:
java.sql.SQLException: Connections could not be acquired from the underlying database!
如何测试 SessionFactory 是否有效?
似乎您真的想测试您是否具有有效的数据库连接。SessionFactory
只是一个包装器,一旦配置好,只要底层没问题,它就可以工作DataSource
。
那么如何测试DataSource
呢?首先,各种连接池允许您定义所谓的测试查询。通常"SELECT 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();
}
}
}