gru*_*uvy 1 python unit-testing python-import python-2.7 python-unittest
我有一个像这样结构的项目:
|tools/
|-- test/
| |-- __init__.py
| |-- test_class1.py
| |-- test_class2.py
|
|-- tools/
|-- __init__.py
| |-- class1.py
| |-- class2.py
|
|-- test_runner (Python script that calls unittest.TestLoader().discover('test'))
|-- README.md
Run Code Online (Sandbox Code Playgroud)
我想运行test_runner并让它执行test文件夹中的所有测试.我的个人测试会有这样的一行:from test_class import TestClass测试适当的类.
test_runner 看起来像这样:
#!/usr/bin/env python
import unittest
import sys
import os
sys.path.append(os.path.realpath(__file__) + '/tools')
suite = unittest.TestLoader().discover('test')
results = unittest.TextTestRunner(verbosity=2).run(suite)
if len(results.errors) > 0 or len(results.failures) > 0:
sys.exit(1)
sys.exit()
Run Code Online (Sandbox Code Playgroud)
现在这不起作用,我的测试文件无法导入相应的类.如果我这样做,我可以让它工作,export PYTHONPATH=/path/to/file但我希望通过脚本实现这一点.
我也尝试sys.path.insert(0, os.path.dirname(__file__) + '/tools')但是这不起作用,因为文件在我使用时没有返回任何内容sys.path.insert.
小智 6
通过指定包名称(在您的情况下为"工具"),确保使用绝对导入.您根本不必修改系统路径.
例如,使用此项目结构并运行main.py:
project
main.py
package1
__init__.py
module1.py
package2
__init__.py
module2.py
Run Code Online (Sandbox Code Playgroud)
在module1.py中,您应该使用
from package2 import module2
Run Code Online (Sandbox Code Playgroud)
要么
from package2.module2 import myclass
Run Code Online (Sandbox Code Playgroud)
这绝对是重要的.无需修改系统路径
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |