PyUnit - 如何为单个单元测试添加超时

时间:2017-05-05 11:05:20

标签: python python-3.x unit-testing python-unittest

我第一次使用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()

当我运行此测试时,PyUnit框架不会捕获test_Falsy的异常,并且测试输出以FAILED (errors=1)结束(而不是您期望的FAILED (errors=2))。

为各个PyUnit测试添加超时的正确方法是什么?

0 个答案:

没有答案