[Python-Dev] PEP: Consolidating names and classes in the `unittest`module (updated 2008-07-15)

Raymond Hettinger python at rcn.com
Tue Jul 15 04:06:49 CEST 2008


> ``set_up(…)``
>  Replaces ``setUp(…)``
 . .
> ``tear_down(…)``
>  Replaces ``tearDown(…)``

Am I the only one who finds this sort of excessive pep-8 underscoring to be horrorific?

Nobody I know spells setup and teardown as two words. I dread using the module with these new names. Underscores are not fun to 
type. They create a weird_mental_pause when reading them.

It's not going to be easy to remember where they are used (ie. isinstance is still isinstance but isset is now is_set). Go figure.


> fail_if_almost_equal

Another thought is that test suite code is going to get seriously crunched when the new, longer method names meet the 78/80 column 
pep 8 restrictions.

class TestMisc(unittest.test_case):
    def lost_four_spaces_here_already(self):
        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

Are there any ideas for some short, pithy, mnemonic names that are self-explantory and not full of underscores; something that 
wouldn't suck to type hundreds of times in a good test module?  IMO, the current names are already too long.


> * Explicit is better than implicit:

Don't forgot the opposing forces:

Beautiful is better than ugly.
Readability counts.

These are especially important for the unittest module.  When I'm making tests, I have to type self.very_long_method_name so many 
times it isn't funny.  It's easy to just stop writing tests when you get tired of it.  Long api names with underscores are a 
disincentive (IMO).


> Use new-style classes throughout

This makes sense for 3.1 but of course we already get that automatically for 3.0 ;-)

For 2.7, it doesn't make as much sense.  Since 2.2 came out, there have been many discussions on changing standard library code to 
use new-style classes.  There was always some concern about subtle changes in semantics and for the most part these requests were 
denied.  I think this reason applies with even more force to the unittest module.  Any risk that we subtlely break someone's 
test-suite is a small disaster.  The 2.6 and 2.7 unittests need to be absolutely stable if they are to serve as a transition tool 
(providing a baseline the 3.0/3.1 is expected to match).

Also, are there any expected benefits from making this change in 2.7?  What will the module do differently?

It seems like a risky change for zero-benefit.


Raymond 



More information about the Python-Dev mailing list