重试装饰方法Python Nosetest的单元测试

问题描述

我的代码中有重试功能。

def retry(retry_times=4,wait_time=1):
"""
Function to use as a decorator to retry any method certain number of times
:param retry_times: number of times to retry a function
:param wait_time: delay between each retry
:return: returns expected return value from the function on success else raises exception
"""
def decorator(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        for _ in range(retry_times):
            try:
                if func(*args,**kwargs):
                    return
            except Exception as e:
                raise e
            time.sleep(secs=wait_time)
    return wrapper
return decorator

我正在像这样的某些功能上使用它:-

retry(retry_times=RETRY_TIMES,wait_time=RETRY_WAIT_TIME)
def get_something(self,some_id):
    ....
    return something or raise exception( just assume)

RETRY_TIMES和WAIT_TIME是一些常量。 现在,我的功能get_something()返回一个值或引发异常。

现在我的问题是我想编写一个测试用例来测试我的重试功能,如何编写单元测试来测试重试功能?

解决方法

最后得到答案: RetryTest(BaseTestCase)类:

def test_retry(self):
    random_value = {'some_key': 5}

    class TestRetry:
        def __init__(self):
            self.call_count = 0

        @retry(retry_times=3,wait_time=1)
        def some_function(self):

            try:
                self.call_count += 1
                if random_value.get('non_existing_key'):
                    return True
            except KeyError:
                return False

    retry_class_object = TestRetry()
    retry_class_object.some_function()
    self.assertEqual(retry_class_object.call_count,3)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...