How would you test a Connection Pool

限于喜欢 提交于 2019-11-28 21:34:49

You could test that

  • getting a connection when the pool is empty gives you a connection
  • getting a connection when a connection has already been got and not released gives you another, different connection
  • releasing a connection doesn't throw any exception
  • getting a connection after one has been released gives you the same connection

Note that such a unit test would need a real database, with a real user and password to test. You could make your connection pool depend on a DataSource, and build your ConnectionPool using a mock DataSource returning mock Connections, in order to be able to test the class without depending on a real database.

For an integration test, you could use dbUnit to load the database with prepared data and then write tests that query the database.

For an unit test, you might consider using a mocking library such as Mockito to ensure that you get the behaviour you expect. No database necessary in this case. [EDIT: However, due to the static method calls like DriverManager.getConnection(), this will require some refactoring and/or dependency injection.]

By combining both the unit tests and integration tests (and mix in some multi-threaded unit tests), you can go a long way towards testing your work.

Industrial strength connection pools have the ability to check connections by making a connection and executing a simple SQL query (e.g. "SELECT 1") to ensure that connection is viable before giving it out. Yours does not.

I don't see where you can initialize the connection pool with a fixed number of connections. The whole point of a connection pool is to amortize the cost of creating a connection over all clients.

I'd worry about the design of your connection pool.

As for testing, just start writing unit tests. Since your pool will be shared, be sure to write some multi-threaded tests to make sure that it's really thread safe.

You should also test concurrency/scalability under load using multiple threads.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!