[Python-Dev] Test cases not garbage collected after run

Michael Foord fuzzyman at voidspace.org.uk
Thu Apr 7 22:12:20 CEST 2011


On 07/04/2011 20:18, Robert Collins wrote:
> On Fri, Apr 8, 2011 at 4:49 AM, Michael Foord<fuzzyman at voidspace.org.uk>  wrote:
>> You mean that the test run keeps the test instances alive for the whole test
>> run so instance attributes are also kept alive. How would you solve this -
>> by having calling a TestSuite (which is how a test run is executed) remove
>> members from themselves after each test execution? (Any failure tracebacks
>> etc stored by the TestResult would also have to not keep the test alive.)
>>
>> My only concern would be backwards compatibility due to the change in
>> behaviour.
> An alternative is in TestCase.run() / TestCase.__call__(), make a copy
> and immediately delegate to it; that leaves the original untouched,
> permitting run-in-a-loop style helpers to still work.
>
> Testtools did something to address this problem, but I forget what it
> was offhand.
>
That doesn't sound like a general solution as not everything is copyable 
and I don't think we should make that a requirement of tests.

The proposed "fix" is to make test suite runs destructive, either 
replacing TestCase instances with None or pop'ing tests after they are 
run (the latter being what twisted Trial does). run-in-a-loop helpers 
could still repeatedly iterate over suites, just not call the suite.

All the best,

Michael

> -Rob


-- 
http://www.voidspace.org.uk/

May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html



More information about the Python-Dev mailing list