python和GUI测试中的包内引用

时间:2010-03-29 07:22:26

标签: python testing packages project-layout

我有关于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文件夹(会有很多这样的文件)。还有其他方法可以实现这个目标吗?

任何输入都很有价值。

谢谢, 里卡德

1 个答案:

答案 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