[TIP] Meta-test methods...
dgou at mac.com
Thu Apr 23 21:01:35 PDT 2009
On 2009 Apr 23, at 9:45 AM, C. Titus Brown wrote:
> On Thu, Apr 23, 2009 at 09:06:42AM -0400, Douglas Philips wrote:
> -> On or about 2009 Apr 23, at 1:14 AM, C. Titus Brown indited:
> -> > Anyway, I double-dare you to make this:
> -> >
> -> > http://github.com/ctb/figleaf/blob/d11d2ee0ce70427b229af15409bff2ab23e090d2/tests/test_regress/__init__.py
> -> >
> -> > work nicely without decorators.
> -> ??? With decorators, you mean?
> Sorry: generators.
Anyway, I double-dare you pay attention to the issue at hand. :)
I never said generators were bad. I said that checking a test method
for being a generator was a hack, seeminly cool at first, but upon
further thought it is just as a proof of concept that it is useful to
have a way to dynamically generate a sequence of test methods/functions.
Testing only for generators is both opaque and, critically, fails to
generalize to arbitrary python sequences.
And since I don't find generators to be bad, this is somewhat moot,
however it amused me to reply anyways...
As to your dare dare, the only generator I found in that file was this
for filename in os.listdir(testdir):
if filename.startswith('tst') and filename.endswith('.py'):
yield compare_coverage, filename
It is rather foolish to post my version, since you have not disclosed
your criteria of "nicely"...
none-the-less, off the cuff, I find this to be slightly nicer. And
while you don't state your criteria, I will say that I think this is -
slightly- nicer because it reduces the level of nesting (Flatter is
better than nested) and gives meaningful names to the concepts involved.
is_test_file = lambda name: name.startswith('tst') and
pair_up = lambda name: (compare_coverage, file)
return map(pair_up, filter(is_test_file, os.listdir(testdir))
More information about the testing-in-python