如何运行Python测试文件
我正在Eclipse中开发Python。结果是,Python的源文件和测试文件放在不同的文件夹里。
我的问题是:我们怎么在命令行中运行测试文件夹里的特定测试文件呢?这些测试文件显然依赖于源文件夹里的文件。
谢谢!
补充说明:如果我运行
python test/myTestFile.py
我会遇到依赖错误,比如:ImportError: No module named SrcFile1
2 个回答
1
解决这个问题主要有两种方法。第一种是使用像 PYTHONPATH 这样的环境变量,告诉测试代码源文件的位置;第二种方法是通过添加相关的 __init__.py
文件,把测试代码和生产代码放在同一个模块树里。采用第二种方法时,文件结构可能看起来像这样:
|-- qbit
| |-- __init__.py
| |-- master.py
| |-- policy.py
| |-- pool.py
| |-- synchronize.py
| `-- worker.py
`-- test
|-- __init__.py
|-- support.py
|-- test_policy.py
|-- test_synchronize.py
`-- test_worker.py
__init__.py
文件可以是一个空文件。
5
你需要确保你的PYTHONPATH设置正确,这样命令行解释器才能找到你的包,或者你可以在Eclipse Pydev中运行测试用例。更新:还有一个选择:使用nose来运行测试可能会更简单,因为它可以自动发现包和测试用例。
如果你的项目结构是这样的:
/home/user/dev/
src/pkg1/
mod1.py
test/
mod1_test.py
你可以使用:PYTHONPATH=$HOME/dev/src python test/mod1_test.py
。我还建议使用distribute
和virtualenv
来为你的项目设置开发环境。
更新:根据评论中的问题进行的更新:
这段内容展示了PYTHONPATH环境变量是如何扩展Python的包搜索路径的:
% PYTHONPATH=foo:bar python -c 'import sys; print sys.path[:3]'
['', '/home/user/foo', '/home/user/bar']
# exporting the variable makes it sticky for your current session. you can
# add this to your shell's resource file (e.g. ~/.profile) or source
# it from a textfile to save typing:
% export PYTHONPATH=bar:baz
% python -c 'import sys; print sys.path[:3]'
['', '/home/user/foo', '/home/user/bar']
% python -c 'import sys; print sys.path[:3]'
['', '/home/user/foo', '/home/user/bar']
以上内容应该能帮助你在短期内开始使用。使用distribute和virtualenv虽然初期设置成本较高,但从长远来看会带来更多好处。当你有时间时,可以看看Stack Overflow上关于如何设置这些工具的许多教程,看看它们是否适合你的项目。