2014-04-17 4 views
0

Python에서 자동 테스트를 실행하려고하는데 가져 오기 오류가 계속 발생합니다.Python Nosetests 가져 오기 오류

TestingPractice 
    - bin 
    - README.txt 
    - setup.py 
    - TestingPractice 
     - __init__.py 
     - main.py 
    - tests 
     - __init__.py 
     - test_main.py 

을 지금 상단 TestingPractice에 CD, 실행 nosetests, 나는 심지어

TestingPractice.main

을 가져올 때, main.py에서 만든 내 방법이 선언되지 않은 것을 얻을 때 다음과 같이 내 디렉토리 계층 구조입니다 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) 

실행 N osetests : 내가 가져 오기위한 여러 가지 경로를 시도

/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

보통 'test' 디렉토리에'__init __. py'를 가질 필요는 없습니다. 'nose'가 아닌'nose '는'__init __. py'가 없어도 test_main.py를 찾을 것입니다. –

+0

'from nose.tools import *'를'from nose.tools import assert_equal'으로 변경하는 것을 고려하십시오. 코드를보다 쉽게 ​​읽을 수있게 해주 며 일반적으로 좋은 연습입니다. 네가 네임 스페이스에 어떤 기능과 변수가 있는지. –

+0

더 많은 고급 테스트 케이스가있을 때 이렇게 바뀌겠습니까? 이 예제에 대한 귀하의 요지를 참조하십시오,하지만 내가 assert_equal 이상을 사용하여 들어가면 여전히 수입 * 나쁜 것인가? – user3543605

답변

0

필자는 이상한 이유로 파이썬에게 함수를 가져 오는 방법을 알려주지 않았습니다. 약간의 명백한 수정이 있었지만 나는 그것을 놓쳤다. 여기

그것이 : 내가했던 test_main.py에서

:에 가정으로 상단 TestingPractice의 작업 디렉토리에 nosetests 근무하면서

다음
from TestingPractice.main import total_hours 

.

+0

예,이 유형의 명시 적 가져 오기가 더 좋습니다. –

0

단순히 "testingPractice로 이동"하지 말고 프로젝트의 루트에 있고 테스트를 실행하십시오.

나는 똑같은 문제를 가지고 과거에 모든 테스트 케이스를 테스트 디렉토리에서 실행 가능하게 만들거나 더 나은 곳으로 만들려고했다. 그러나 이러한 요구 사항은 일반적으로 말도 안되며 규칙을 따릅니다. 프로젝트의 루트에서 테스트를 실행하면은 매우 잘 작동합니다. 실제로 모든 테스트 코드와 테스트에 명확성을 부여하므로 사용자가 좋아할 것입니다.

+0

저는 프로젝트의 루트에있었습니다. 루트 폴더 (TestingPractice)와 하위 디렉토리 TestingDirectory가 있습니다. 다음은 [link] (http://as.ynchrono.us/2007/12/filesystem-structure-of-python-project_21.html)입니다. 내 해결책을 게시, 내 수입에 뭔가 문제가있었습니다. – user3543605

+0

아, 알겠습니다. 프로젝트 디렉토리와 파일 목록에 'TestingPractice'라는 두 개의 디렉토리가 있습니다 (TestingDirectory는 없습니다). 패키지를 개발할 때 (로컬 또는 전역으로) 설치하지 않았다면, TestingPractice 패키지에서 가져 오기에 문제가있을 수 있습니다. –