开发者

Doctest and relative imports

开发者 https://www.devze.com 2023-01-22 06:16 出处:网络
I\'m having trouble using doctest with relative imports.The simple solution is just to get rid of the relative imports.Are there any others?

I'm having trouble using doctest with relative imports. The simple solution is just to get rid of the relative imports. Are there any others?

Say I have a package called example containing 2 files:

example/__init__.py

"""
This package is entirely useless.
>>> 开发者_开发百科arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""

from .A import Aardvark

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

example/A.py

class Aardvark(object):
    def talk(self):
        print("I am an aardvark.")

If I now attempt

python example/__init__.py

then I get the error

Traceback (most recent call last):
  File "example/__init__.py", line 8, in <module>
    from .A import Aardvark
ValueError: Attempted relative import in non-package


Create another file my_doctest_runner.py:

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

Execute my_doctest_runner.py to run doctests in example/__init__.py:

$ python2.7 my_doctest_runner.py
**********************************************************************
File "/tmp/example/__init__.py", line 4, in example
Failed example:
    arnold.talk()
Expected:
    I am an aaardvark.
Got:
    I am an aardvark.
**********************************************************************
1 items had failures:
   1 of   2 in example
***Test Failed*** 1 failures.


Pytest's --doctest-modules flag takes care of relative imports:

$ ls example/
A.py  __init__.py
$ pytest --doctest-modules example
==================== test session starts ====================
...

example/__init__.py .                                 [100%]

===================== 1 passed in 0.03s =====================


Just do

from A import Aardvark
0

精彩评论

暂无评论...
验证码 换一张
取 消