2015-09-10 5 views
2

С кодомnosetests: Получение трассировки стека на Ctrl + C

import unittest 
import time 

class SleepingTest(unittest.TestCase): 

    def test_that_gets_stuck(self): 
     for a in xrange(100000000000000000): 
      pass 

я получаю этот выход

❯ nosetests use_nosetest.py 
^C 
---------------------------------------------------------------------- 
Ran 1 test in 4.267s 

OK 

Как вы можете видеть, я сделал Ctrl + C, чтобы прервать программу. Но нос говорит, что он прошел тест ОК. Я скорее надеялся, что он скажет, что тест не прошел и дал мне трассировку стека.

Есть ли способ, которым я могу получить трассировку стека, где мои тесты застряли?

+1

Там нет ничего в тестовом случае сбоя. Чтобы получить трассировку стека, какое-то условие должно идти не так где-то между моментом запуска теста и моментом нажатия Ctrl + C. – ILostMySpoon

+2

@ILostMySpoon, хорошо. Как разработчик python затем отлаживает, почему его/ее программа зависает в unittest? – Tarrasch

ответ

0

Попробуйте capturing ваш сигнал Ctrl-C для запроса в отладчик, т.е .:

import unittest 
import time 

from nose.tools import set_trace 

class SleepingTest(unittest.TestCase): 

    def test_that_gets_stuck(self): 
     try: 
      for a in xrange(10000000): 
       time.sleep(1) 
     except KeyboardInterrupt, err: 
      set_trace()