python unittest导入类子目录

时间:2013-10-30 22:00:00

标签: python unit-testing python-2.7 python-import 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

我想运行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()

现在这不起作用,我的测试文件无法导入相应的类。如果我export PYTHONPATH=/path/to/file我可以让它工作,但我希望通过脚本来实现这一点。

我也尝试了sys.path.insert(0, os.path.dirname(__file__) + '/tools'),但这不起作用,因为当我使用sys.path.insert时,文件不会返回任何内容。

1 个答案:

答案 0 :(得分:6)

通过指定包名称(在您的情况下为“工具”),确保使用绝对导入。 您根本不必修改系统路径。

例如,使用此项目结构并运行main.py:

project
    main.py
    package1
        __init__.py
        module1.py
    package2
        __init__.py
        module2.py

在module1.py中,您应该使用

from package2 import module2

from package2.module2 import myclass

这绝对是重要的。 无需系统路径修改