Is it possible to only test specific functions with doctest in a module?
Asked Answered
H

2

27

I am trying to get into testing in Python using the doctest module. At the moment I do

  1. Write the tests for the functions.
  2. implement the functions code.
  3. If Tests pass, write more tests and more code.
  4. When the function is done move on to the next function to implement.

So after 3 or 4 (independent) functions in the same module with many tests I get a huge output by doctest. And it is a little annoysing.

Is there a way to tell doctest "don't test functions a(), b() and c()", so that it runs only the unmarked functions?

I only found the doctest.SKIP flag, which is not sufficient for my needs. I would have to place this flag in a lot of lines. And if I would want to check a marked function again, I would have to go manually through the code and remove any flag I set inside.

Herriot answered 9/4, 2012 at 21:31 Comment(2)
Doctest isn't bad for some quick and dirty testing, but I'd strongly suggest looking into a more advanced testing library. Python's built in unittest module is actually very good. (docs.python.org/library/unittest.html)Dennis
@Wildluck: I know about pythons unittest, thanks. But all I need now is quick and dirty testing. :-)Herriot
C
40

looks like you could pass the function to run_docstring_examples:

def f(a, b, c):
    '''
    >>> f(1,2,3)
    42
    '''

if __name__ == '__main__':
    import doctest
#    doctest.testmod()
    doctest.run_docstring_examples(f, globals())

example found via google.

Condor answered 10/4, 2012 at 0:12 Comment(3)
It did work, thank you. Sorry for responding that late! I miss the summery of doctest.testmod(verbose=True) where it tells you something like 18 passed and 0 failed, and such. Apart from that it is kind of what I was looking for. :-)Herriot
And what about doing this from a repl and without modifying the source file?Benedikta
Note that verbose is available for this function: doctest.run_docstring_examples(f, globs[, verbose][, name][, compileflags][, optionflags])Reduplication
M
2

I put together a helper script to make this a little less painful. It can be installed using:

pip install doctestfn

It can then be used as follows:

usage: doctestfn [-h] [-v] module function

Run doctests for one function

positional arguments:
  module         Module to load
  function       Function to test

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  Enable verbose doctest output
Monostich answered 30/9, 2021 at 15:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.