2014-05-23 2 views
2

필자는 지연된 코드와 일반적으로 지연된 코드를 테스트하여 내 머리를 감싸는 데 어려움을 겪고 있습니다.꼬인 지연을 사용한 테스트

나는 정말 실패해야하는 간단한 테스트가 있다고 생각합니다.

Twisted의 테스트 도구 Trial에 대한 내 이해에서 지연을 반환 할 수 있어야하며 완료되면 테스트가 완료됩니다.

여기 내 맛있는 코드가 있습니다. 누군가 도움을 줄 수 있습니다. 사전에

import unittest, time 

from twisted.internet import reactor, defer 

class MyTest(unittest.TestCase): 

def test_simple_deferred(self): 

    print "\nStarting Test" 

    my_deferred = defer.Deferred() 

    def print_time(): 
     print time.time() 
     self.assertTrue(False) 

    my_deferred.addCallback(print_time) 

    reactor.callLater(3, my_deferred.callback) 

    print time.time() 

    return my_deferred 

덕분에, 나는 예를 많이 보았다,하지만 난 내가 너무 오래 동안보고 된 시점에 입수했습니다 생각합니다.

+0

https://twistedmatrix.com/documents/current/core/howto/trial.html을 읽으셨습니까? – Glyph

+0

물론, 불행하게도, 제 코드에 무엇이 잘못되었는지를 정확히 파악하지 못했습니다. 지연된 여전히 활성 상태로 돌아 오면 테스트가 더 이상 활성화되지 않을 때까지 기다려야합니다. 예제는 내 단순한 생각보다 훨씬 복잡하지만, 내가 바보 같은 일을하고 있다는 것을 알고있다. – Alex

답변

3

두 가지 문제가 있습니다.

첫 번째로 특수 지연 처리를 얻으려면 테스트 케이스가 파이썬 표준 라이브러리 버전이 아닌 twisted.trial.unittest.TestCase에서 상속되어야합니다.

마지막으로 reactor.callLater을 올바르게 호출하지 않았거나 Deferred.callback()의 올바른 인수를 제공하지 않았습니다. 지연을 값인에게 주어야합니다. 그것이 무엇인지 신경 쓰지 않는다면 None으로하십시오. 마찬가지로 콜백은 이되어야하며, 그 인수는입니다. 당신은 그것을 무시할 수 있습니다.

from twisted.trial import unittest 
#^^^^^^^^^^^^^^^^^ 
import time 

from twisted.internet import defer 
from twisted.internet import reactor 

class MyTest(unittest.TestCase): 

    def test_simple_deferred(self): 

     print "\nStarting Test" 

     my_deferred = defer.Deferred() 

     def print_time(dont_care): 
     #    ^^^^^^^^^ 
      print time.time() 
      self.assertTrue(False) 

     my_deferred.addCallback(print_time) 

     reactor.callLater(3, my_deferred.callback, None) 
     #          ^^^^^^  
     print time.time() 

     return my_deferred 
+0

와우, 나는 그걸 오래 바라 보았다. 나는 처음 썼을 때 전화를 걸었지만 나중에 붙잡 혔을 때 여러 가지를 꼬집었다. 도와 주셔서 감사합니다 ... – Alex