繁体   English   中英

如何从父目录导入模块? (单位测试目的)

[英]How do I import a module from a parent directory? (unittest purposes)

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

我想要实现的目标:我有一个主包的子包,其中包含我要在其中测试的所有模块。 我想把一个子包装放在名为'tests'的内容中,或者包含我所有测试用例的东西,我希望能够从包外部聚合到一个测试套件中,这样我最终可以运行所有测试整个项目一气呵成。

结构是这样的:

/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项目的结构化的任何一般建议也是值得赞赏的。

从父目录运行单元测试,使目录位于PYTHONPATH中(当前工作目录始终为)。 这是通过从父目录执行测试文件或使用nosetest之类的东西来完成的,它会以递归方式查找程序包中的所有测试。

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

考虑到您使用命令行工具来运行测试,您可以按照文档操作并执行以下操作:

python -m unittest package.tests.someModuleTests

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

import projectPackage.package.someModule

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM