3
在2011年後回答了NUnit的這個問題: How to unit test a method that runs into an infinite loop for some input?PyUnit - 如何單元測試運行到一個輸入的無限循環的方法?
是否有PyUnit中類似TimeoutAttribute,我可以以同樣的方式使用?
我做了一些搜索,發現「持續時間」,但看起來並不一樣。
在2011年後回答了NUnit的這個問題: How to unit test a method that runs into an infinite loop for some input?PyUnit - 如何單元測試運行到一個輸入的無限循環的方法?
是否有PyUnit中類似TimeoutAttribute,我可以以同樣的方式使用?
我做了一些搜索,發現「持續時間」,但看起來並不一樣。
有沒有什麼在pyunit本身,但作爲一個工作可以推出自己的。以下是使用多處理程序包的方法。
from functools import wraps
from multiprocessing import Process
class TimeoutError(Exception):
pass
def timeout(seconds=5, error_message="Timeout"):
def decorator(func):
def wrapper(*args, **kwargs):
process = Process(None, func, None, args, kwargs)
process.start()
process.join(seconds)
if process.is_alive():
process.terminate()
raise TimeoutError(error_message)
return wraps(func)(wrapper)
return decorator
下面是如何使用它的一個例子:
import time
@timeout()
def test_timeout(a, b, c):
time.sleep(1)
@timeout(1)
def test_timeout2():
time.sleep(2)
if __name__ == '__main__':
test_timeout(1, 2, 3)
test_value = False
try:
test_timeout2()
except TimeoutError as e:
test_value = True
assert test_value
感謝您的答覆!我無法讓示例運行。我得到一個錯誤 - TypeError:'NoneType'對象不可調用。這出現在兩個裝飾線上。目前我擁有同一個文件中的所有內容。 – Murkantilism
我更新了它,現在它應該可以在Linux上運行。稍後我會看看我能否在Windows上工作。 – Joe
酷,一個Windows解決方案將不勝感激! – Murkantilism