[Python-Dev] PEP: Consolidating names and classes in the `unittest`module (updated 2008-07-15)
Nick Coghlan
ncoghlan at gmail.com
Tue Jul 15 12:58:57 CEST 2008
Ben Finney wrote:
>> self.fail_if_almost_equal('were already on the 34th column before'
>> 'writing anything substantive',
>> self.testedobject.tested_method(arg1, arg2 +
>> arg3, arg4)
>> # Imagine typing and line wrapping dozens more tests like this
>
> Yikes. Why are you using such huge indents? Break the line where
> indents won't be so enormous.
While true, that doesn't change the fact that fail_if_almost_equal is an
undesirably long method name.
> I'm very much in favour of having the namessay exactly what they're
> testing. They need to be long because there are many of them doing
> slightly-different things, so need careful disambiguation.
The "almost_equal" methods for floating point comparison are the main
culprits for excessive method length, closely followed by the
"fail_unless" variants.
(21, 'failUnlessAlmostEqual') -> 24 with underscores
(21, 'assertNotAlmostEquals') -> 25 with underscores
(20, 'assertNotAlmostEqual') -> 24 with underscores
(18, 'assertAlmostEquals') -> 20 with underscores
(17, 'failIfAlmostEqual') -> 20 with underscores
(17, 'assertAlmostEqual') -> 19 with underscores
(16, 'failUnlessRaises') -> 18 with underscores
(15, 'failUnlessEqual') -> 17 with underscores
(15, 'assertNotEquals') -> 17 with underscores
(14, 'assertNotEqual') -> 16 with underscores
(12, 'assertRaises') -> 13 with underscores
(12, 'assertEquals') -> 13 with underscores
(11, 'failIfEqual') -> 13 with underscores
(11, 'assertFalse') -> 12 with underscores
(11, 'assertEqual') -> 12 with underscores
(10, 'failUnless') -> 11 with underscores
(10, 'assertTrue') -> 11 with underscores
(7, 'assert_') -> 7 with underscores
(6, 'failIf') -> 7 with underscores
(4, 'fail') -> 4 with underscores
One option for rationalising the API would be to merely keep the
shortest version of each phrase (i.e. use assert* instead of
fail_unless* for the positive tests and fail_if* instead of assert_not*
for the negative tests, and always drop the trailing 's' from 'equals').
This simple rule would eliminate 12 of the 20 methods (including the
four longest method names and 7 of the longest 9), leaving the following
minimal set of methods:
fail_if_almost_equal (20)
assert_almost_equal (19)
assert_raises (13)
fail_if_equal (13)
assert_equal (12)
assert_ (7)
fail_if (7)
fail (4)
Adding in possible positive and negative forms of the proposed new
methods (using words more appropriate for a method rather than copying
the infix operators):
fail_if_identical (17)
fail_if_contains (16)
assert_identical (16)
assert_contains (15)
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-Dev
mailing list