Search code examples
pythonstringdoctest

Python using doctest on the mainline


Hello i was wondering if it is possible and if so how? to do doctests or something similar from the mainline, instead of testing a function as is described in the doctest docs i.e.

"""
>>> 
Hello World
"""

if __name__ == "__main__":
    print "Hello"
    import doctest
    doctest.testmod()

This is part of being able to test students scripts against a docstring, i found this snipet of code that allows me to input both as strongs

import doctest
from doctest import DocTestRunner, DocTestParser
enter code here
def run_doctest(code, test):
    import doctest
    from doctest import DocTestRunner, DocTestParser
    code = code + '\n__dtest=__parser.get_doctest(__test, globals(), "Crunchy Doctest", "crunchy", 0)\n__runner.run(__dtest)\n'
    runner = DocTestRunner()
    parser = DocTestParser()
    exec code in {'__runner':runner, '__parser':parser, '__test':test}

that does more or less but it seems hardly ideal, an suggestions on either point


Solution

  • doctest is not limited to testing functions. For example, if dt.py is:

    '''
      >>> foo
      23
    '''
    
    foo = 23
    
    if __name__ == '__main__':
        import doctest
        doctest.testmod()
    

    then, e.g.:

    $ py26 dt.py -v
    Trying:
        foo
    Expecting:
        23
    ok
    1 items passed all tests:
       1 tests in __main__
    1 tests in 1 items.
    1 passed and 0 failed.
    Test passed.
    

    (works just as well without the -v, but then it wouldn't have much to show: just silence;-). Is this what you're looking for?