Тестирование с витой отсрочкой
Я изо всех сил пытался обернуть голову, тестируя искаженный код с отложенными и вообще отложенными кодами.
У меня есть простой тест, который действительно должен провалиться, я думаю.
Исходя из моего понимания в тестовом инструменте 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
Заранее спасибо, я просмотрел много примеров, но, думаю, я дошел до того, что слишком долго смотрел на это.
1 ответ
У тебя две проблемы.
Во-первых, чтобы получить специальную отложенную обработку, ваш контрольный пример должен наследоваться от twisted.trial.unittest.TestCase
, а не версия стандартной библиотеки Python.
Наконец, вы не звоните 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