[TIP] Meta-test methods...

Robert Collins robertc at robertcollins.net
Mon Apr 27 16:40:30 PDT 2009

On Mon, 2009-04-27 at 13:39 -0400, Doug Philips wrote:
> On or about Monday, April 27, 2009, at 09:01AM, "Robert Collins indited:
> >I'd love it if you gave testscenarios a go, as it seems to address all
> >your points (including that each test+scenario gets a unique name so you
> >can select them individually).
> I presume you're referring to:
>    http://lists.idyll.org/pipermail/testing-in-python/2009-April/001861.html
> ??
> I can see how to use that when the scenario lists can be computed at module load time, I'm still not sure I get how to compute them "late" (as per my examples in the previous emails) when the precise "values" are not known until the test method is run...

import sys
from unittest import (TestCase, TestSuite, TestLoader, _TextTestResult,

from testscenarios import generate_scenarios

class DemoTest(TestCase):
    scenarios = []

    def test_passes_lt(self):
        self.assertTrue(self.start < self.end)

    def test_fails_lt(self):
        self.assertFalse(self.start < self.end)

if __name__ == '__main__':
    # can't use TextTestRunner as we don't have a load hook available
    # in python core yet, so we need a bit of plumbing that the test
    # runner normally does.
    loader = TestLoader()
    tests = loader.loadTestsFromName(__name__)
    # arbitrary delay goes here
    # Now we decide what scenarios we want
    DemoTest.scenarios.append(('01', dict(start=0, end=1)))
    DemoTest.scenarios.append(('10', dict(start=1, end=0)))
    # Now we're actually about to run.
    suite = TestSuite(generate_scenarios(tests))
    print suite.countTestCases()
    for test in suite:
        print test.id()
    suite.run(_TextTestResult(_WritelnDecorator(sys.stdout), False, 2))
$ python <foo.py>

test_fails_lt (__main__.DemoTest) ... FAIL
test_fails_lt (__main__.DemoTest) ... ok
test_passes_lt (__main__.DemoTest) ... ok
test_passes_lt (__main__.DemoTest) ... FAIL

Note that the ids() have been set correctly; I'd forgotten that unittest
stopped showing ids some time back - and testtools' clone_with_new_id
doesn't set the __str__ for cloned tests; I think it should (though I'm
partial to showing test ids because they are so useful

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://lists.idyll.org/pipermail/testing-in-python/attachments/20090428/d50666fb/attachment.pgp 

More information about the testing-in-python mailing list