【问题标题】:Relative Imports and Unit Testing相对导入和单元测试
【发布时间】:2013-12-16 03:39:55
【问题描述】:
我一直在做一个项目,我的目录系统看起来像这样:
tests/
corpus/
tests.py
monkey/
corpus/
corpus.py
setup.py
我也有__init__.py 散布在这些目录中。
问题是当我尝试运行corpus/tests.py 时,它会抱怨这样一行代码:import monkey.corpus as corpus。
当从根目录使用-m 开关运行或在根目录中有一个tests.py 文件时,它(可以理解)工作。如果我想自动化多个测试,这两个(或可能的其他选项)中的哪一个是最可取的?
【问题讨论】:
标签:
python
testing
import
directory
【解决方案1】:
我会将__init__ 文件放在tests 和monkey 的级别中,并将其包含在sys.path 中。这显然更实用,因为您不必每次调用它时都指定参数。
此外,如果其他人要使用您的代码,显然他们不会期望在每次运行文件时都指定 -m 参数 :)
所以,在根目录的__init__文件中:
root/
/tests
/monkey
__init__.py
希望这会有所帮助!
【解决方案2】:
如果您使用setuptools,您可以在 setup.py 中指定测试套件并使用python setup.py test 运行测试
from setuptools import setup
setup(
...
test_suite='tests'
...)
另一种方法是从目录根目录的nose 包中运行nosetests。
注意我提到的两种方法都可能无法执行测试文件。