2012-10-09 3 views
1

파이썬 코드베이스는 nose를 사용하여 모든 단위 테스트를 실행하고 nose.twistedtools를 사용하여 모든 테스트를 실행하려고합니다.하지만 종료시에는 모두 매달리고 있습니다. 이 문제를 해결하는 데 도움이 될 것입니다.꼬인 단위 테스트는 코를 통해 실행됩니까?

from nose.twistedtools import deferred 
from twisted.internet.defer import Deferred 

@deferred(timeout=1) 
def test_rudimentary(): 
    def done(_ignored): 
     print "DONE" 

    defer = Deferred() 
    defer.addCallback(done) 
    return defer 

호출이나 출력은 다음과 같습니다 : 나는 시간 제한을 설정하지 않으면

$ nosetests test_simple.py 
F 
====================================================================== 
FAIL: test_simple.test_rudimentary 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/<ENV>/lib/python2.7/site-packages/nose/case.py", line 197, in runTest 
    self.test(*self.arg) 
    File "/home/<ENV>/lib/python2.7/site-packages/nose/twistedtools.py", line 165, in wrapper 
    % timeout) 
TimeExpired: timeout expired before end of test (1.000000 s.) 

---------------------------------------------------------------------- 
Ran 1 test in 1.001s 

FAILED (failures=1) 

이 시험 영원히 중단 여기에 달려 간단한 테스트입니다.

+0

nose는 Twisted 기반 단위 테스트에 권장되는 테스트 러너는 아닙니다. 테스트 메소드에서 Deferreds를 반환하는 것은 Twisted 기반 코드에 대한 테스트 작성을 권장하지 않습니다. –

+0

좋은 문서가 있습니까? TDD를하는 Twisted 문서는 정말 약합니다. 재판은 정답입니까? 유닛 2? – slacy

+0

재판은 좋은 대답입니다. 나는 unittest2를 시도하지 않았지만 여전히 xUnit 스타일의 라이브러리라고 생각하기 때문에 작동 할 수 있습니다. 다음은 Twisted-using 코드에 대한 단위 테스트를 작성하는 방법에 대한 문서입니다 - http://twistedmatrix.com/documents/current/core/howto/trial.html - 더 이상 다루지 않지만 더 이상 시작은 아닙니다. . –

답변

2

귀하의 코드는 defer.callback/errback (아마도 간접적으로) 호출에 대한 책임이 있습니다. 시도하십시오 :

reactor.callLater(0.1, defer.callback) 
return defer