[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

AltStyle によって変換されたページ (->オリジナル) /