How to make pytest run doctests as well as normal tests directory?

Question:

We currently have pytest with the coverage plugin running over our tests in a tests directory.

What’s the simplest way to also run doctests extracted from our main code? --doctest-modules doesn’t work (probably since it just runs doctests from tests). Note that we want to include doctests in the same process (and not simply run a separate invocation of py.test) because we want to account for doctest in code coverage.

Asked By: Yang

||

Answers:

Could you try with the repo version of pytest and paste a session log? I’d think --doctest-modules should pick up any .py files.

Answered By: hpk42

Now it is implemented :-).

To use, either run py.test --doctest-modules command, or set your configuration with pytest.ini:

$ cat pytest.ini
# content of pytest.ini
[pytest]
addopts = --doctest-modules

Man page: PyTest: doctest integration for modules and test files.

Answered By: dmitry_romanov

worked with doctest as well as with plain tests in one module. for a non-doctest test to be picked up, standard py.test discovery mechanism applies: a module name with test prefix, test function with test prefix.

Answered By: Zdenek Maxa

Looks old question but put my answer here just in case.

Answered By: Satoru SATOH

This is how I integrate doctest in a pytest test file:

import doctest
from mylib import mymodule

def test_something():
   """some regular pytest"""
   foo = mymodule.MyClass()
   assert foo.does_something() is True

def test_docstring():
   doctest_results = doctest.testmod(m=mymodule)
   assert doctest_results.failed == 0

pytest will fail if doctest fails and the terminal will show you the doctest report.

Answered By: Bkyn
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.