[Zope-dev] Why I dislike narrative doctests

Sidnei da Silva sidnei at enfoldsystems.com
Wed Apr 23 16:22:29 EDT 2008


Can't you start a plain-old unittests module and stick your test in
there? Is there any rule that says you cannot create a plain-old test
module if the project you are fixing the bug in uses doctests?

On Wed, Apr 23, 2008 at 5:19 PM, Marius Gedminas <mgedmin at b4net.lt> wrote:
> Suppose I find a bug (say, zope.testing.testrunner.StartUpFailure
>  objects make unittest.TextTestRunner cry).  Being a good developer I
>  want to start the bug fix with a unit test.
>
>  Now if zope.testing used old-style isolated unit tests, I could open the
>  tests.py (or tests/test_testrunner.py) in a text editor and start
>  writing:
>
>     class OptionsStub(object):
>         post_mortem = False
>
>     def doctest_StartUpFailure():
>         """Test that StartUpFailure is a proper unittest.TestCase
>
>         StartUpFailure is a TestCase-lookalike that is inserted into the
>         test suite to indicate that a failed import of a test module
>         won't be unnoticed.
>
>             >>> from zope.testing.testrunner import StartUpFailure
>             >>> options = OptionsStub()
>             >>> module_name = 'test_me'
>             >>> exc_info = (ImportError, ImportError('zonkulator'), None)
>             >>> test = StartUpFailure(options, module_name, exc_info)
>             >>> unittest.TextTestRunner(verbosity=2).run(test)
>
>         This is a regression test for http://launchpad.net/bugs/221151
>         """
>
>  There, I'm almost done.  Now I can fix the bug and paste the correct
>  output into the doctest.
>
>  But zope.testing uses narrative doctests instead of isolated unit tests.
>  There are 22 plain-text files that together comprise over 4500 lines of
>  text.  Now instead of mechanically opening the appropriate test module
>  and grepping for the class/function name I have to figure out which of
>  the txt files is the appropriate place for the new test.  After that I
>  have to figure out how to insert it into the narrative seamlessly.  Or
>  decide to create a new file---but a hundred of .txt files each 20-lines
>  long is not a good idea, in my opinion.
>
>  Suddenly I almost don't want to fix the bug any more.
>
>  While I was writing this, I suddenly realised that almost all
>  zope.testing's txt files are actually functional tests.  There are
>  nearly no unit tests there.  Perhaps that's what causing me pain.
>
>  I still maintain that:
>
>   * adding a new unit test should be a trivial task
>
>   * extending a narrative doctest is not a trivial task
>
>   * the only way to solve this conflict is to explicitly separate unit
>     tests (test_*.py) from doctest-enhanced API documentation (*.txt).
>
>  Marius Gedminas
>  --
>  UNIX is user friendly. It's just selective about who its friends are.
>
> -----BEGIN PGP SIGNATURE-----
>  Version: GnuPG v1.4.6 (GNU/Linux)
>
>  iD8DBQFID5m0kVdEXeem148RAqs5AJ4qUo9IiqMSsuFOIrZBTq+xyWv/FQCePM/Q
>  eTvxFfGfDPuGA1YzlM8CTks=
>  =J91E
>  -----END PGP SIGNATURE-----
>
> _______________________________________________
>  Zope-Dev maillist  -  Zope-Dev at zope.org
>  http://mail.zope.org/mailman/listinfo/zope-dev
>  **  No cross posts or HTML encoding!  **
>  (Related lists -
>   http://mail.zope.org/mailman/listinfo/zope-announce
>   http://mail.zope.org/mailman/listinfo/zope )
>
>



-- 
Sidnei da Silva
Enfold Systems                http://enfoldsystems.com
Fax +1 832 201 8856     Office +1 713 942 2377 Ext 214


More information about the Zope-Dev mailing list