Python Nosetests导入错误

时间:2014-04-17 02:53:53

标签: python python-2.7 import module nosetests

我正在尝试在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 =。无济于事。

2 个答案:

答案 0 :(得分:0)

根本不要“cd到TestingPractice”,留在项目的根目录并从那里运行测试。

我过去遇到了完全相同的问题,试图让所有测试用例都可以从测试目录运行,甚至可以从任何地方运行。但是这样的要求通常是无稽之谈并且遵循一条规则:从项目的根目录运行您的测试非常有效 - 事实上它为您的所有测试代码和测试带来了清晰度,您会喜欢它。

答案 1 :(得分:0)

出于一些奇怪的原因,我没有告诉Python如何导入该函数。虽然有点明显的修复,但我错过了它。

这是:

我必须在test_main.py中执行

from TestingPractice.main import total_hours

然后,在顶级TestingPractice的工作目录中,nosetests按原样运行。