Я вижу проблему в своем тестовом наборе в суде, где все работает нормально, пока я не получу тайм-аут. Если тест не удается из-за тайм-аута, функция tearDown никогда не вызывается, оставив реактор нечистым, что, в свою очередь, приводит к сбою остальных тестов. Я считаю, что tearDown следует вызывать после таймаута, кто-нибудь знает, почему это может случиться?tearDown не вызывается после таймаута в скрученной пробной версии?
ответ
Вы правы, что tearDown()
следует называть независимо от того, что происходит в вашем тесте. От the documentation для tearDown()
:
Это называется даже если тестовый метод поднял исключение
Тем не менее, есть улов. Из той же документации:
Этот метод вызывается только в том случае, если setUp() преуспевает, независимо от результата тестового метода.
Так это звучит, как вы, возможно, запустить реактор в setUp()
и когда это тайм-аут, это предотвращения своего tearDown()
от бега - идея в том, что бы вы ни пытались «настроить» в setUp()
был не успешно настроена, поэтому вы не хотите пытаться снести ее. Однако было бы трудно диагностировать с уверенностью, если вы не предоставите код своих методов setUp
и tearDown
, а также код любых соответствующих тестов.
Это довольно странно, потому что на моей коробке разрывы выполняются, даже если происходит таймаут. Испытания должны прекратиться, если реактор не находится в чистом состоянии, если вы не используете флаг --unclean-warnings
. Остается ли тестовый бегун после тайм-аута для вас? Какую версию Python и Twisted вы используете?
В качестве побочного примечания, если вам нужно запустить уникальный отрыв для конкретной тестовой функции, есть очень удобный обратный вызов addCleanup()
. Это пригодится, если вам нужно отменить функции обратного вызова, LoopingCall или callLater, чтобы реактор не находился в грязном состоянии. addCleanup
возвращает Deferred
, так что вы можете просто вызвать обратные вызовы, выполняющие adhoc teardown. Это может быть хорошим вариантом попробовать, если классный срыв не работает на вас.
PS
Я так привык писать «хорошо себя ведет» Twisted код, я даже не помню, как попасть в нечистом состоянии реактора: D Я клянусь, я не хвастаюсь. Не могли бы вы дать мне краткий обзор того, что вы делаете, чтобы я мог проверить это на моем конце?
Я нашел проблему, я поставлю ее здесь, если она будет полезной для кого-либо еще в будущем.
Я возвращал отложенное из теста, которое уже было вызвано (как и в случае с отложенным вызовом), но у него все еще была незавершенная цепочка обратного вызова. Из того, что я вижу в пробном коде здесь https://github.com/twisted/twisted/blob/twisted-16.5.0/src/twisted/trial/_asynctest.py#L92, реактор разбивается, когда это происходит, что объясняет, почему tearDown не вызван. Решение для меня состояло в том, чтобы вернуть отсроченные тесты, которые не имеют цепочку обратного вызова, которая живет в течение длительного времени (это обратные вызовы не возвращают отложенные сами).
- 1. AutoResetEvent Set вызывается после таймаута
- 2. Выполнение пробной версии программы
- 3. Teardown не вызывается модульное тестирование с Tornado
- 4. Создание Временной версии пробной версии Android-приложения
- 5. Внедрение 30-дневной пробной версии
- 6. ASP.NET Session_End вызывается сразу после Session_Start после таймаута сеанса
- 7. Отключить приложение после даты истечения срока действия для пробной версии
- 8. Экспериментальная версия пробной версии пробной версии импорта в Adobe Flash Builder
- 9. компилировать код контроллера в пробной версии webots
- 10. Есть ли режим блокировки для пробной версии?
- 11. создание пробной версии приложения Visual Basic
- 12. Проверка номера карты во время пробной версии
- 13. Метод создания пробной версии Adobe AIR
- 14. Испытание пробной версии Azure создает проблемы?
- 15. Подготовьтесь к завершению пробной версии Visual Studio
- 16. Разработка пробной версии платной версии приложения для iPhone
- 17. call tearDown() в setUp()?
- 18. Возвращение JSNI после таймаута
- 19. dispatch_semaphore_wait не запускается после таймаута
- 20. setTimeout() функция вызывается перед длительностью таймаута?
- 21. Вызывается ли tearDown, если тестовый случай вызывает исключение? (JUnit)
- 22. Xcode UI test - swipeRight() не работает после tearDown
- 23. Не удается войти в систему после таймаута
- 24. MVC3 - ajax на странице входа не работает после несанкционированной пробной версии пользователя, но работает нормально
- 25. Как включить Jira RPC-плагин в пробной версии Jira
- 26. Чтение и запись дат в реестр для целей пробной версии
- 27. Android в приложении покупательные: беспроцентный кредит против бесплатной пробной версии
- 28. JUnit, Селен и Teardown
- 29. NSURLConnection застрял после таймаута
- 30. Сколько экземпляров виртуальной машины Azure в бесплатной пробной версии
Есть ли способ узнать, не сбит ли setUp? Похоже, что он успешно завершает работу и переходит к тесту.Тогда это терпит неудачу в тесте и tearDown никогда не называется – ppao
Ли время ожидания вызывает исключение? Если это так, вы можете попробовать поймать это исключение. Но это трудно сказать, не видя метода. Не могли бы вы добавить код вашего метода 'setUp' к вашему вопросу? – elethan