How do I code lots of simple tests
Paul Moore
pf_moore at yahoo.co.uk
Tue Oct 21 16:16:06 EDT 2003
More information about the Python-list mailing list
Tue Oct 21 16:16:06 EDT 2003
- Previous message (by thread): Unittest - How do I code lots of simple tests
- Next message (by thread): Unittest - How do I code lots of simple tests
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
One of the things I really dislike about Unittest (compared, say, to a number of adhoc testing tricks I've used in the past, and to Perl's "standard" testing framework) is that the testcase-as-a-class model tends to imply a relatively high granularity in testing. A good example of this comes from "Dive Into Python" (http://diveintopython.org) section 7.3. Here, the author has written a module which converts numbers to Roman numerals. The test case is then class KnownValues(unittest.TestCase): knownValues = ( (1, 'I'), ... # 50-plus specific cases def testToRomanKnownValues(self): """toRoman should give known result with known input""" for integer, numeral in self.knownValues: result = roman.toRoman(integer) self.assertEqual(numeral, result) Now, to my mind, the big problem here is that this *isn't* one test, but rather 50 (or more). OK, the same checks are done if everything succeeds, but 1. If a test fails, the rest are skipped! If there's a pattern to the failures (the code handles numbers ending in 4 and 9 wrongly, for example) it's much easier to find if all of the checks are reported. 2. Psychologically, "52 tests succeeded" is a much bigger boost than "1 test succeeded" (albeit this test covered 52 cases). And it's not just psychology - we really *did* test 52 distinct conditions. The only way I can see of producing the "true" number of tests is via some form of ugly hack like test_values = ((1, 'I'), ...) class KnownValues(unittest.TestCase): pass for arabic, roman in test_values: def test(self): result = roman.toRoman(arabic) self.assertEqual(roman, result) setattr(KnownValues, 'test_%s_%s' % (arabic, roman), test) But I can't really see that as the "right approach". Can anyone suggest a more reasonable way of running this sort of table-driven test via unittest? Maybe I should use doctest instead, but to be honest, I prefer the overall infrastructure of unittest (for real tests). It's just this particular issue that really bugs me... Paul. -- This signature intentionally left blank
- Previous message (by thread): Unittest - How do I code lots of simple tests
- Next message (by thread): Unittest - How do I code lots of simple tests
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list