2016-06-10 6 views
1

테스트 나는 실행하는 것을 시도하고있다 :파이썬 nosetests AssertionError를! 없음 = '흠 ...'아래

D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder>nosetests 
.F 
====================================================================== 
FAIL: test_hmm_method_returns_hmm (test_orphan_elb_finder.test_basic.BasicTestSuite) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder\test_basic.py", line 18, in test_hmm_method_returns_hmm 
    self.assertEqual(orphan_elb_finder.hmm(), 'hmmm...') 
AssertionError: None != 'hmmm...' 
-------------------- >> begin captured stdout << --------------------- 
hmmm... 

--------------------- >> end captured stdout << ---------------------- 

---------------------------------------------------------------------- 
Ran 2 tests in 0.002s 

FAILED (failures=1) 
:

def test_hmm_method_returns_hmm(self): 
    #set_trace() 
    assert_equals(orphan_elb_finder.hmm(), 'hmmm...') 

을 나는 다음과 같은 출력을 얻을 코드를 실행하면

orphan_elb_finder.hmm 결과가 None 인 것으로 보입니다. 나는 set_trace의 주석을 해제하고 수동으로 명령을 실행할 때 그것은 나에게 정확한 출력을 제공하기 때문에 이상한 어느 :

-> assert_equals(orphan_elb_finder.hmm(), 'hmmm...') 
(Pdb) orphan_elb_finder.hmm() 
hmmm... 

을하지만 시도하고 디버거에서 같은 주장 실행하면 내가 가지고있는

(Pdb) assert_equals(orphan_elb_finder.hmm(), 'hmmm...') 
hmmm... 
*** AssertionError: None != 'hmmm...' 

을 그것이 stdout 방식과 관련이 있다는 느낌이 들지만, 나는 더 많은 정보를 찾아내는 방법에 관해서 조금 잃어버린 /이 문제를 해결한다.

# -*- coding: utf-8 -*- 

def get_hmm(): 
    """Get a thought.""" 
    return 'hmmm...' 

def hmm(): 
    """Contemplation...""" 
    print get_hmm() 

어떤 도움이 크게 될

UPDATE 감사합니다 : : 아래

는 orphan_elb_finder 방법입니다

그래서 내가 흠 대신 get_hmm 전화를 시도 Blckknght 응답을 다음(). 내가 호출 방법을 시도하지만 나는 시도

assert_equals(orphan_elb_finder.get_hmm(), 'hmmm...') 
AttributeError: 'module' object has no attribute 'get_hmm' 

그런 다음 아래의 오류가 발생하고 아래의 모듈은 어떤 이유로 get_hmm() 메소드를 공개하지 않는 것 같다 가능한 방법

(Pdb) dir(orphan_elb_finder) 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'core', 'hmm'] 

을 확인 ?

UPDATE 2 :

무슨 일이 있었는지 알게되었습니다. 초기화 평 안에 내 orphan_elb_finder 패키지 내부 나는

from .core import hmm 

from .core import get_hmm 

로 변경했고 작동하는 것 같았다. 어쨌든 패키지 작성자가 get_hmm을 개인 메소드로 들여 썼다고 생각합니다. 확실하지 않은 경우 get_hmm이 None을 반환 할 때 어떻게 표시되는지 테스트 한 결과 어떻게 되었을까요?

답변

2

메서드와 달리 hmm 메서드는 return 문을 사용하지 않습니다. print 문자열은 "hmmm..."이지만 None을 반환합니다.

get_hmm()을 호출하고 hmm()을 호출하십시오. 전자는 'hmmm...'을 따옴표와 함께 인쇄합니다. 그것은 문자열을 반환하기 때문이며 대화 형 콘솔은 반환 값 repr을 인쇄합니다. 반대로 hmm()을 호출하면 자체 인쇄 (따옴표 제외)가 수행되고 None (다른 값이 지정되지 않은 경우 기본 반환 값)을 반환합니다.대화 형 콘솔은 None 일 때 반환 값 repr을 인쇄하지 않으므로 여분의 인쇄물은 없습니다.

>>> get_hmm() 
'hmmm...' 
>>> hmm() 
hmmm... 
+0

감사합니다.이 말은 완벽한 의미입니다. 내 다음 과제는 뭔가를 반환하는 get_hmm()을 실행하려고 할 때입니다. 내 패키지가 해당 기능을 참조 할 수없는 것으로 보입니다. 업데이트 된 원래 질문보기 –

+0

'hmm'의 인쇄물을 테스트하는 것이 가능합니다. 공개 된 API 만 사용할 수 있다면 더 적절할 수 있습니다. 그러나 실제로 그러한 테스트를 작성하는 방법을 알지 못하므로 제안하지 않았습니다. 아마도'sys.stdout'을 임시적으로 뭔가 ('StringIO' 객체와 같은) 것으로 대체 한 다음 그것에 무엇이 기록되었는지를 확인해야 할 것입니다. – Blckknght

+0

감사합니다. 나는이 모든 것들에 대해 하나의 마지막 질문을 가지고있다. 내 orph_elb_finder 패키지의 __init__.py 파일에 "from .core import get_hmm"이 있습니다. 하지만 "import .core"로 변경하면 구문 오류가 발생합니다. 내가 묻는 것은 각각의 개별 메소드를 가져올 필요가 없도록 core.py에서 모든 것을 어떻게 가져올 수 있는가하는 것입니다. 아니면 이것을하는 나쁜 방법입니까? 나는 가이드를 여기에 따르고있다. -> http://docs.python-guide.org/en/latest/writing/structure/ –