如何运行Python测试文件

1 投票
2 回答
3329 浏览
提问于 2025-04-16 13:28

我正在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。我还建议使用distributevirtualenv来为你的项目设置开发环境。

更新:根据评论中的问题进行的更新:

这段内容展示了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上关于如何设置这些工具的许多教程,看看它们是否适合你的项目。

撰写回答