[ https://issues.apache.org/jira/browse/DERBY-5726?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13265015#comment-13265015 ]
Kathey Marsden commented on DERBY-5726: --------------------------------------- This sounds like a good idea to ensure teardown gets called and things get cleaned up. I remember sometime back doing a test cleanup cleanup effort, but can't exactly remember my motivation. It might have been making sure things run in the default heap or maybe it had something to do with permgen space. Why is the cleanup important? > Make it more difficult to forget calling super.tearDown() from > BaseJDBCTestCase's subclasses > -------------------------------------------------------------------------------------------- > > Key: DERBY-5726 > URL: https://issues.apache.org/jira/browse/DERBY-5726 > Project: Derby > Issue Type: Improvement > Components: Test > Affects Versions: 10.9.0.0 > Reporter: Knut Anders Hatlen > Assignee: Knut Anders Hatlen > Priority: Minor > Attachments: d5726-1a.diff > > > Many of the classes that extend BaseJDBCTestCase and override the tearDown() > method, forget to call super.tearDown(), and thereby prevent resources from > being freed after completion. We should add a mechanism that enforces the > correct behaviour. > If we were starting from scratch, we might have made > BaseJDBCTestCase.tearDown() final and added a new overridable method that was > called from BaseJDBCTestCase.tearDown() before it freed the statements and > connections. Then there would be no way to prevent > BaseJDBCTestCase.tearDown() from running in the subclasses. That would > however require us to change all existing overrides of > BaseJDBCTestCase.tearDown() (current count: 131), which would be a chunk of > work. > I'd rather suggest that we add an override of runBare() in BaseJDBCTestCase > that asserts that the connection has been cleared out when a test case has > completed successfully. Something like this: > public void runBare() throws Throwable { > super.runBare(); > // It's quite common to forget to call super.tearDown() when > // overriding tearDown() in sub-classes. > assertNull( > "Connection should be null by now. " + > "Missing call to super.tearDown()?", conn); > } > Then it would still be possible to forget to call super.tearDown(), but it > would be discovered when trying to run the test. > Adding the above method to BaseJDBCTestCase and running > InternationalConnectTest gave this result: > .....F.F....F > Time: 5,748 > There were 3 failures: > 1) > testDriverManagerConnect(org.apache.derbyTesting.functionTests.tests.jdbcapi.InternationalConnectTest)junit.framework.AssertionFailedError: > Connection should be null by now. Missing call to super.tearDown()? > at > org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:431) > at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24) > at junit.extensions.TestSetup$1.protect(TestSetup.java:21) > at junit.extensions.TestSetup.run(TestSetup.java:25) > at > org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57) > 2) > testBoundaries(org.apache.derbyTesting.functionTests.tests.jdbcapi.InternationalConnectTest)junit.framework.AssertionFailedError: > Connection should be null by now. Missing call to super.tearDown()? > at > org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:431) > (...) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira