【问题标题】:How do I import a module from a parent directory? (unittest purposes)如何从父目录导入模块? (单元测试目的)
【发布时间】:2011-08-03 10:27:59
【问题描述】:

我刚刚完成了我正在处理的项目的核心部分的编写,我想在继续之前使用 unittest 为其编写测试。我知道我以前应该这样做,但是当我开始时我并不了解 Python,所以.. 无论如何..

我想要实现的目标:我有一个主包的子包,其中包含我想要在其中测试的所有模块。我想在名为“测试”的子包中放置一个子包,然后包含我所有的测试用例,我希望能够从包外部聚合到一个测试套件中,以便最终我可以运行所有测试一口气完成整个项目。

结构是这样的:

/projectPackage
/projectPackage/package
/projectPackage/package/\__init__.py (empty)
/projectPackage/package/someModule.py
/projectPackage/package/... (more modules)
/projectPackage/package/testing.py (runs all the tests in /tests/)
/projectPackage/package/tests
/projectPackage/package/tests/\__init__.py (empty)
/projectPackage/package/tests/someModuleTests.py

我遇到的问题:

someModuleTests 必须从父包中导入 someModule 才能测试其方法。这似乎不起作用。我收到各种错误,例如:

Attempted relative import beyond toplevel package

无论如何,我希望这只是因为我是 Python 菜鸟!对于我将如何为这个项目做这件事,我有自己的想法,因为当然每个都是不同的,但任何关于中大型 python 项目结构的一般性建议也值得赞赏。

【问题讨论】:

    标签: python unit-testing import


    【解决方案1】:

    从父目录运行单元测试,这样该目录就在你的 PYTHONPATH 中(当前工作目录总是在)。这是通过执行父目录中的测试文件或使用类似nosetest 递归查找包中的所有测试来完成的。

    不要使用相对导入,它们会导致这样的事情。也不要破解您的 PYTHONPATH 和/或 sys.path 来尝试修复它。

    【讨论】:

    • 好的,谢谢。我会支持你,但我没有足够的声誉:S
    • 没问题,如果你足够喜欢我认为你可以选择我的过去作为答案:-)
    【解决方案2】:

    如果您可以执行您的代码,那么您的 PYTHONPATH 应该已经正确设置。您需要做的是指定要导入的模块,例如

    import projectPackage.package.someModule
    

    【讨论】:

      【解决方案3】:

      考虑到您正在使用命令行工具来运行测试,您可以关注the docs 并获得类似以下内容:

      python -m unittest package.tests.someModuleTests
      

      【讨论】:

        猜你喜欢
        • 2019-11-10
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多