在python3中,如何测试工作区根目录下的.py文件?

时间:2019-03-03 16:17:52

标签: python python-3.x

假设文件层次结构如下:

|--WORKSPACE
   |--main.py
   |--subdir
   |  --__init__.py
   |  --sub1.py
   |  --sub2.py

在python2中,我想在子模块脚本文件中所有模块代码的下面放置一些测试代码,然后我可以运行并检查结果。让正在运行的根路径为WORKSPACE。例如 在main.py中,我会写

from subdir import sub1

和sub1.py中的

from sub2 import something

if __name__ == '__main__':
    do some tests

在python3中,我必须这样写:

from subdir.sub2 import something

当运行目录为subdir时,它肯定会因导入错误而停止...因此我必须将pwd更改为WORKSPACE。我认为这不是一种优雅的方法,是否还有其他方法可以在subdir中运行作为替代方法?

3 个答案:

答案 0 :(得分:0)

它不需要目录名称。例如,假设

 ├── main.py
 └── subdir
    ├── __init__.py
    ├── sub1.py
    └── sub2.py

在main.py

from subdir import sub2
sub2.foo()

在/subdir/sub1.py

from sub2 import foo

if __name__ == '__main__':
    foo()

在/subdir/sub2.py

def foo():
    print("foo!")

无论我在哪里运行sub1,无论使用WORKSPACE都是有效的

答案 1 :(得分:0)

别那样做。组织您的软件包并在其中使用相对导入,而无需提及父软件包名称。 如果需要,请使用子包。最后(或者从一开始就取决于您的心情),创建一个名为tests的子包,其中包含所有测试。从那里导入要在软件包中测试的内容,就像从软件包中任何其他位置导入一样。使用模块unittest来编写unittest.TestCase的内部测试子包。

从软件包根目录执行python -m unittest discover,请参见here或自定义测试运行和输出报告,请参见here。您可能需要研究该帮助页面一段时间。

现在,您可以一次运行所有测试,尽管有些方法只能选择其中一些。

答案 2 :(得分:0)

我想你可以添加

import sys
sys.path.append('subdir')

from subdir import sub1

发送到您的main.py, 这样,它将为您获取该子文件夹中的所有相对导入,而无需每次都调用该子文件夹

sub1.py中的

from sub2 import foo