【问题标题】: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__ 文件放在testsmonkey 的级别中,并将其包含在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

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

      【讨论】:

        猜你喜欢
        • 2012-08-08
        • 2018-03-31
        • 2018-07-18
        • 1970-01-01
        • 2015-12-10
        • 1970-01-01
        • 2015-09-30
        • 2015-11-28
        • 1970-01-01
        相关资源
        最近更新 更多