python - PyUnit - 如何对某个输入进入无限循环的方法进行单元测试?

标签 python unit-testing timeout infinite-loop python-unittest

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/

相关文章:

Java 不存在 'share' 字符串

python - 在 Autodesk Maya 等 Python 环境中使用 Nose 运行单元测试?

python - 安装了 MySQLdb,在 virtualenv 之外工作但在内部不存在。如何解决?

python - 如何在单个 Django 模型中存储任意类型的值?

java - Spring/Hibernate 测试 : Inserting test data after DDL creation

batch-file - sleep 和超时​​的区别?

haskell - 具有超时的并发 Haskell 操作

java - Tomcat 5.5 无法在 eclipse 中启动 - 5 分钟后超时

python - pandas any 中 Axis 的定义

python - 插入值时如何存储dict的差异?