[Python-Dev] Proposed unittest changes

Jesse Noller jnoller at gmail.com
Thu Apr 17 17:19:35 CEST 2008


On Thu, Apr 17, 2008 at 10:59 AM, Michael Foord
<fuzzyman at voidspace.org.uk> wrote:
> Guido van Rossum wrote:
>  > I'm worried that a mass renaming would do anything but inconvenience
>  > users during the already stressful 2->3 transition.
>  >
>  > I'm more in favor of the original proposal of reducing the redundancy post-3.0.
>  >
>  >
>
>  So nix the PEP-8'ifying until after 3.0.
>
>  So new methods should follow the current naming scheme (assertIn,
>  assertNotIn etc).
>
>
>  > If you're looking for useful features, Google has a set of extensions
>  > to unittest.py that I find useful:
>  >
>  > - module-level setUp and tearDown
>  >
>  So when a suite is made from a module the setUp should be called before
>  the first test and tearDown after the last. I can look at that.
>
>
>  > - routines for comparing large lists and strings that produce useful
>  > output indicating exactly where the inputs differ.
>  >
>  > - assertLess etc.
>  >
>  By etc I assume you mean:
>
>     assertLessThan
>     assertGreaterThan
>     assertLessThanOrEquals
>     assertGreaterThanOrEquals
>
>  Would not variants be useful as well - it seems not as the not of one is
>  always another... (I think 'assertLessThan' reads better than
>  'assertLess' but will do what I'm told...)
>
>
>  > - assertSameElements (sort of like assert(set(x) == set(y))
>  >
>
>  Sounds good.
>
>  Did you look at the other proposals?
>
>  * Decorator to make a function a TestCase
>  * Convenience RunTests functions taking modules, suites and TestCases
>  and running them
>  * Improved messages for assertEquals and assertNotEquals when an
>
> explicit message is passed in
>  * Improved message when comparing lists/tuples with assertEquals
>  * The additional asserts that I suggested (In/NotIn, RaisesWithMessage,
>  Is/NotIs)
>
>  I think that there is still work I can do on the docs even before any
>  grand renaming...
>
>  Michael Foord
>
>
>
>  > --Guido
>  >
>  > On Thu, Apr 17, 2008 at 6:49 AM, Michael Foord
>  > <fuzzyman at voidspace.org.uk> wrote:
>  >
>  >> Hello all,
>  >>
>  >>  I'm starting to put together a list of cleanups (with documentation
>  >>  changes) for the unittest module. I thought someone had already done
>  >>  this but the issue with the most comments I could find was 2578 which
>  >>  doesn't go into much detail:
>  >>
>  >>  http://bugs.python.org/issue2578
>  >>
>  >>  The thing most people would like is test discovery - but that probably
>  >>  requires some discussion before anything can be added to unittest.
>  >>
>  >>  What I would like to do is PEP-8'ify the method names (widening the API
>  >>  rather than shrinking it!):
>  >>
>  >>     assert_true
>  >>     assert_false
>  >>     assert_equals
>  >>     assert_not_equals
>  >>     assert_raises
>  >>     set_up
>  >>     tear_down
>  >>     failure_exception (? - class attribute)
>  >>     TestSuite.add_test
>  >>
>  >>  (etc)
>  >>
>  >>  Documenting that these are to be preferred to 'assertEquals' and
>  >>  'failUnlessEquals' (etc) and that the 'assert' statement should be used
>  >>  instead of 'assert_'.
>  >>
>  >>  Adding the following new asserts:
>  >>
>  >>     assert_in    (member, container, msg=None)
>  >>     assert_not_in     (member, container, msg=None)
>  >>     assert_is     (first, second, msg=None)
>  >>     assert_not_is   (first, second, msg=None)
>  >>     assert_raises_with_message    (exc_class, message, callable, *args,
>  >>  **keywargs)
>  >>
>  >>  A decorator to turn a test function into a TestCase ("as_test_case" ?).
>  >>
>  >>  A simple 'RunTests' function that takes a collection of modules, test
>  >>  suites or test cases and runs them with TextTestRunner - passing on
>  >>  keyword arguments to the test runner. This makes running a test suite
>  >>  easier - once you have collected all your test cases together you can
>  >>  just pass them to this function so long as you are happy with the
>  >>  default runner (possibly allowing an alternative runner class to be
>  >>  provided as a keyword argument).
>  >>
>  >>  I would provide an implementation for discussion of course.
>  >>
>  >>  I would also like to make the error messages for "assert_equals" and
>  >>  "assert_not_equals" more useful - showing the objects that compare
>  >>  incorrectly even if an explicit message is passed in. Additionally, when
>  >>  comparing lists and tuples that are the same length show the members
>  >>  (and indices?) that were different.
>  >>
>  >>  I've copied Steve Purcell into this email, but his comments on issue
>  >>  2578 indicate that he is happy for 'us' to make changes and he no longer
>  >>  has a string sense of "ownership" of this module.
>  >>
>  >>  Michael Foord

+1 on your changes Michael - I really like the decorator idea. Let me
know if you want help on adding the new stuff or updating the
documentation. What about aiming this at 2.6 instead of 3.0?

-jesse


More information about the Python-Dev mailing list