python 和 GUI 测试中的包内引用
Posted
技术标签:
【中文标题】python 和 GUI 测试中的包内引用【英文标题】:Intra-package references in python and GUI tests 【发布时间】:2010-03-29 07:22:25 【问题描述】:我有关于 python 包和测试的问题。我正在使用 wx python 编写一个应用程序,并且 gui 部分具有以下基本文件夹/包结构。 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...
但是,对于应用程序的 gui 部分,除了单元测试(它们没有问题)之外,我还希望为每个视图提供一个小的“测试”/示例。也就是说,对于日志窗格,我希望有一个小的可运行示例,它将启动一个显示视图以测试布局是否正常等的裸骨应用程序。 我开始的方式是我有一个
if __name__ == "__main__":
# create some small window and a wx app
# instanciate the panel and launch the app
pass
在面板/视图本身的实际实现文件中。这为日志窗格创造了奇迹。我可以单独运行文件来查看视图并查看它是否结合在一起。
当然,mainframe.py 的策略失败了,因为无法解决对 logpane.py 的依赖。这是因为当前的主模块是 mainframe.py 并且 mainframe.py 可以访问 utilviews 包的唯一方法是主/启动模块是否在树中更靠前。
那么我该如何构建这些类型的测试呢?对于单元测试,我使用 nose 这很好并且可以解决问题,因为nose 是根据 mainapp 文件夹启动的(因此所有包内引用都有效)。但是这些测试就像小的独立程序。我根本不能用这些 python 文件弄乱 mainapp 文件夹(会有很多这样的文件)。我还有其他方法可以做到这一点吗?
任何意见都是有价值的。
谢谢, 里卡德
【问题讨论】:
【参考方案1】:您可以使用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
【讨论】:
谢谢。这是一个解决方案。虽然它增加了一些麻烦,因为我希望其他开发人员能够从 SVN 中检查项目,然后能够运行测试。也许我可以在 if name == "main" 子句中添加一些逻辑,该子句从 CWD 向上遍历并以编程方式 () 通过 sys.path) 附加到路径它到达 mainapp 文件夹。那应该可以在任何地方拥有工作副本。我会试试的!谢谢! 是的,修改sys.path
也可以,但我认为这很不合时宜。但是,如果您将测试合并到某个 test/
目录中,您可以简单地提供一个小的 shell 脚本来执行测试,它会在之前设置 PYTHONPATH
。以上是关于python 和 GUI 测试中的包内引用的主要内容,如果未能解决你的问题,请参考以下文章