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

2024-06-28 15:01:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚完成了一个项目的核心部分,我想在继续之前使用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项目结构的一般性建议也值得赞赏。


Tags: 模块项目pypackage核心init测试用例tests
3条回答

考虑到您使用的是命令行工具来运行测试,您可以按照the docs进行操作,并具有如下内容:

python -m unittest package.tests.someModuleTests

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

import projectPackage.package.someModule

从父目录运行单元测试,使该目录位于PYTHONPATH中(当前工作目录始终为)。这可以通过从父目录执行测试文件或使用类似nosetest的方法来完成,nosetest递归地查找包中的所有测试。

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

相关问题 更多 >