我有关于python包和测试的问题。我正在使用 wx python 编写应用程序,并为gui部分提供以下基本文件夹/包结构。 mainframe.py 窗口依赖于 logpane.py 面板,可以使用 mainframe.py 中的绝对导入轻松导入该面板:< / p>
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...
然而,对于我想要的应用程序的gui部分,除了单元测试(并且它们没有问题)之外,对每个视图都有一个小的“测试”/示例。也就是说,对于logpane,我想要一个小的可运行的例子,它将显示一个裸骨应用程序,显示测试布局是否正常的视图等。 我开始的方式是我有一个
if __name__ == "__main__":
# create some small window and a wx app
# instanciate the panel and launch the app
pass
在面板/视图本身的实际实现文件中。这为logpane创造了奇迹。我可以单独运行该文件来查看视图并看到它保持在一起。
但是,由于无法解析对 logpane.py 的依赖性,因此 mainframe.py 的策略失败了。这是因为当前主模块 是mainframe.py,而mainframe.py可以到达utilviews包的唯一方法是主/已启动模块是否在树中。
那么如何构建这些类型的测试呢?对于单元测试,我使用 nose 这很好并且处理问题,因为每个mainapp文件夹启动了鼻子(因此所有的intrapackage引用都有效)。但这些测试就像小型独立程序。我简直不能用这些python文件混乱mainapp文件夹(会有很多这样的文件)。还有其他方法可以实现这个目标吗?
任何输入都很有价值。
谢谢, 里卡德
答案 0 :(得分: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