2
我第一次使用PyUnit。我想要求一些測試在指定的時間內運行。據我所知,沒有內在的方法來做到這一點。PyUnit - 如何給單個單元測試添加超時
我找到了答案:PyUnit - How to unit test a method that runs into an infinite loop for some input?。但是,此解決方案會導致PyUnit忽略其他失敗的測試。這裏有一個例子:
import multiprocessing
import unittest
from functools import wraps
import time
def timeout(seconds=5, error_message="Timeout"):
def decorator(func):
def wrapper(*args, **kwargs):
process = multiprocessing.Process(None, func, None, args, kwargs)
process.start()
process.join(seconds)
if process.is_alive():
raise TimeoutError(error_message)
return wraps(func)(wrapper)
return decorator
class MyTestCase(unittest.TestCase):
@timeout(1)
def test_Sleepy(self):
time.sleep(5)
@timeout(1)
def test_Falsy(self):
self.assertTrue(False)
if __name__ == '__main__':
unittest.main()
當我運行試驗中,test_Falsy異常不被PyUnit中框架和測試輸出補時FAILED (errors=1)
(而不是FAILED (errors=2)
如你所期望)結束。
什麼是增加超時到單個PyUnit測試的正確方法?