我正在尝试在Python上运行自动化测试,并且我一直遇到导入错误。我的目录层次结构如下:
TestingPractice
- bin
- README.txt
- setup.py
- TestingPractice
- __init__.py
- main.py
- tests
- __init__.py
- test_main.py
现在当我cd到顶级TestingPractice并运行nosetests时,我得到的是我在main.py中创建的方法未声明,即使导入TestingPractice.main
main.py:
def total_hours(hours):
sum = 0
for hour in hours:
sum += hour
return sum
test_main.py:
# Test the hour computation.
from nose.tools import *
import TestingPractice.main
def test_hours():
to_test = [8,8,7,8] # 31
assert_equal(total_hours(to_test), 31)
运行nosetests时:
/Documents/Developer/Python/TestingPractice/tests/test_main.py", line 7, in test_hours
assert_equal(total_hours(to_test), 31)
NameError: global name 'total_hours' is not defined
我尝试了许多不同的导入路径,甚至相对导入(导致相对导入错误),并尝试导出PYTHONPATH =。无济于事。
答案 0 :(得分:0)
根本不要“cd到TestingPractice”,留在项目的根目录并从那里运行测试。
我过去遇到了完全相同的问题,试图让所有测试用例都可以从测试目录运行,甚至可以从任何地方运行。但是这样的要求通常是无稽之谈并且遵循一条规则:从项目的根目录运行您的测试非常有效 - 事实上它为您的所有测试代码和测试带来了清晰度,您会喜欢它。
答案 1 :(得分:0)
出于一些奇怪的原因,我没有告诉Python如何导入该函数。虽然有点明显的修复,但我错过了它。
这是:
我必须在test_main.py中执行:
from TestingPractice.main import total_hours
然后,在顶级TestingPractice的工作目录中,nosetests按原样运行。