Скрученные юнит-тесты запускаются через нос?

Наша кодовая база Python использует нос для запуска всех модульных тестов, и я пытаюсь использовать нос.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)

Если я не установлю тайм-аут, тест зависнет навсегда.


person slacy    schedule 09.10.2012    source источник
comment
Nose не рекомендуется использовать для запуска модульных тестов на основе Twisted. В противном случае возврат Deferreds из тестовых методов не является рекомендуемым способом написания тестов для кода на основе Twisted.   -  person Jean-Paul Calderone    schedule 10.10.2012
comment
Любые хорошие документы по этому поводу? Документация Twisted по использованию TDD очень и очень слаба. Триал - правильный ответ? модуль 2?   -  person slacy    schedule 10.10.2012
comment
испытание - хороший ответ, да. Я не пробовал unittest2, но, поскольку он все еще должен быть библиотекой в ​​​​стиле xUnit, он может работать. Вот документ о том, как писать модульные тесты для Twisted с использованием кода — twistedmatrix.com /documents/current/core/howto/trial.html — там еще много чего не охвачено, но, по крайней мере, это начало.   -  person Jean-Paul Calderone    schedule 10.10.2012


Ответы (1)


Ваш код отвечает за вызов defer.callback/errback (скорее всего, косвенно). Пытаться:

reactor.callLater(0.1, defer.callback)
return defer
person jfs    schedule 09.10.2012