Тестирование с витой отсрочкой

Я изо всех сил пытался обернуть голову, тестируя искаженный код с отложенными и вообще отложенными кодами.

У меня есть простой тест, который действительно должен провалиться, я думаю.

Исходя из моего понимания в тестовом инструменте 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
Другие вопросы по тегам