相对进口和单位测试

时间:2013-11-29 22:40:47

标签: python testing import directory

我一直在做一个项目,我有一个如下所示的目录系统:

tests/
    corpus/
        tests.py
monkey/
    corpus/
        corpus.py

setup.py

我的__init__.py遍布这些目录。

问题在于,当我尝试运行corpus/tests.py时,它会抱怨一行代码:import monkey.corpus as corpus

它(可以理解)在从根目录使用-m开关运行或在根目录中有一个tests.py文件时有效。如果我想自动化多个测试,那么这两个(或可能是其他选项)中哪一个是最优选的?

2 个答案:

答案 0 :(得分:1)

如果您使用的是setuptools,则可以在setup.py中指定测试套件,然后使用python setup.py test

运行测试
from setuptools import setup

setup(
    ...
    test_suite='tests'
    ...)

另一种方法是从目录的根目录运行nosetests包中的nose

注意对于我提到的两种方法,测试文件可能无法执行。

答案 1 :(得分:1)

我会将__init__文件放在testsmonkey级别,并将其包含在sys.path中。它显然更实用,因为每次调用它时都不必指定参数。

此外,如果其他人打算使用您的代码,显然他们不希望每次运行文件时都指定-m参数:)

因此,在根目录的__init__文件中:

root/
   /tests
   /monkey
   __init__.py

希望这有帮助!