由于导入错误,无法测试Python项目

时间:2015-06-21 21:56:42

标签: python testing python-import

我目前的项目中有以下目录结构:

Project/
    project/
        __init__.py
        classifier.py
        util.py
        lib/
            __init__.py
           scraper.py
        tests/
           test_classifier.py
           test_util.py

我试图在tests/目录中的Project/目录中运行测试,但目前无法执行此操作。原因是我的每个测试Python文件的第一行如下:

from project import Event, EventClassifier

因此我无法使用以下内容调用测试文件:

python project/tests/test_util.py

有人有解决方案吗?我认为这是一个非常常见的问题,因为Python约定是将测试目录包含在主包中。

1 个答案:

答案 0 :(得分:0)

我为我的项目使用基于setuptools的setup.py,感谢python setup.py develop我可以"安装"例如在没有源代码副本的virtualenv中,但是我的项目的一个egg-link。因此,导入工作,并在开发过程中立即生效。

虽然测试是在你的主程序包中,但我会挑战你的断言。我将它放在project级别的外面。这样可以实现更简单的打包,因为我部署的软件包不应包含测试。

以下setup.py说明了这个概念:

  import os
  import sys
  from setuptools import setup, find_packages

  test_requirements = ["nose", "coverage"]

  # THIS IS JUST FOR ILLUSTRATING THE IDEA
  base = os.path.dirname(__file__)

  project = os.path.join(base, "project")
  tests = os.path.join(base, "tests")

  if not os.path.exists(project):
      os.mkdir(project)
      with open(os.path.join(project, "__init__.py"), "wb") as outf:
          outf.write("""
  def magic():
      print "It's magic!"
  """)
      os.mkdir(tests)
      with open(os.path.join(tests, "project_tests.py"), "wb") as outf:
          outf.write("""
  import unittest
  import project

  class ProjectTests(unittest.TestCase):

       def test_magic(self):
           project.magic()
  """)

  # END: THIS IS JUST FOR ILLUSTRATING THE IDEA



  setup(
      name="test.project",
      version="1.0",
      description="Simple test-project",
      author="Diez B. Roggisch",
      author_email="my@email.com",
      license="MIT",
      install_requires=[
          "requests",
          ],
      extras_require=dict(
          test=test_requirements,
          ),
      packages=find_packages(exclude=['ez_setup', 'tests']),
      zip_safe=True,
      entry_points={
          "console_scripts" : [
              "test-commandline = project:magic",
              ],
          },
  )

创建virtualenv并激活它,然后在项目内运行python setup.py develop。这应该设置一个小样本项目(显然你需要删除该部分),创建一个控制台脚本和一个可以使用nosetestes tests -s运行的测试用例。