Python中的包内引用与GUI测试
我在使用Python包和测试方面遇到了一些问题。我正在用wx python写一个应用程序,下面是我为图形界面部分准备的基本文件夹/包结构。mainframe.py窗口依赖于logpane.py面板,这在mainframe.py中可以通过绝对导入轻松实现:
import guiapp.utilviews.logpane
文件夹/包结构:
mainapp
- main.py
guiapp
- __init__.py
utilviews
- __init__.py
- logpane.py
- other stuff...
mainview
- __init__.py
- mainframe.py
- other stuff here...
other views...
不过,对于应用程序的图形界面部分,我希望除了单元测试(这没问题)之外,还能为每个视图准备一个小的“测试”/示例。也就是说,对于logpane,我想要一个小的可运行示例,能够启动一个简单的应用程序,展示这个视图,以测试布局是否正常等。
我开始的方式是在面板/视图的实际实现文件中添加一个
if __name__ == "__main__":
# create some small window and a wx app
# instanciate the panel and launch the app
pass
这对logpane非常有效。我可以独立运行这个文件,查看视图并确认它是否正常显示。
但当然,这种方法在mainframe.py中就不行了,因为它无法解决对logpane.py的依赖。因为当前的主模块是mainframe.py,而mainframe.py要访问utilviews包,必须要有一个更高层次的模块来启动。
那么,我该如何组织这些类型的测试呢?对于单元测试,我使用nose,这很好,能够解决问题,因为nose是从mainapp文件夹启动的(这样所有的包内引用都能正常工作)。但这些测试就像小的独立程序。我实在不想把这些Python文件堆在mainapp文件夹里(因为会有很多这样的文件)。有没有其他方法可以实现这个目标?
任何建议都很有价值。
谢谢,
Rickard
1 个回答
2
你可以使用 PYTHONPATH
。在执行你的测试文件之前,把它设置为你的主要项目目录。这样一来,它就能像你直接从那个目录执行一样,正确找到所有的导入内容。
$ find
.
./test
./test/test.py
./some
./some/__init__.py
$ cat some/__init__.py
x = 10
$ cat test/test.py
import some
print some.x
$ cd test
$ export PYTHONPATH=..
$ python test.py
10