2011 年的一篇帖子为 NUnit 回答了这个问题: How to unit test a method that runs into an infinite loop for some input?
PyUnit 中是否有类似的 TimeoutAttribute 可供我以相同的方式使用?
我进行了一些搜索并找到了“Duration”,但这似乎并不相同。
最佳答案
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
关于python - PyUnit - 如何对某个输入进入无限循环的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366761/