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

Robert Collins robertc at robertcollins.net
Fri Apr 8 03:10:04 CEST 2011


On Fri, Apr 8, 2011 at 8:12 AM, Michael Foord <fuzzyman at voidspace.org.uk> wrote:
> 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.

Thats quite expensive - repeating discovery etc from scratch. If you
don't repeat discovery then you're assuming copyability. What I
suggested didn't /require/ copying - it delegates it to the test, an
uncopyable test would simply not do this.

-Rob


More information about the Python-Dev mailing list