1

我有关于 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

在面板/视图本身的实际实现文件中。这为日志窗格创造了奇迹。我可以单独运行文件来查看视图并查看它是否结合在一起。

但是,由于无法解决对logpane.py的依赖关系,因此mainframe.py的策略当然失败了。这是因为当前的主模块mainframe.py 并且 mainframe.py 可以访问 utilviews 包的唯一方法是主/启动模块是否在树中更靠前。

那么如何构建这些类型的测试呢?对于单元测试,我使用nose,它很好并且可以解决问题,因为nose 是根据mainapp 文件夹启动的(因此所有包内引用都有效)。但是这些测试就像小的独立程序。我根本不能用这些 python 文件弄乱 mainapp 文件夹(会有很多这样的文件)。有没有其他方法可以做到这一点?

任何输入都是有价值的。

谢谢,里卡德

4

1 回答 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
于 2010-03-29T07:43:39.710 回答