【发布时间】:2014-07-05 09:43:48
【问题描述】:
我正在尝试测试一个装饰类方法:
class S3Store(object):
@retry(exceptions=Exception, delay=1, tries=5, backoff=2)
def delete(self, dest_id):
return self._delete(dest_id=dest_id)
def _delete(self, dest_id):
bucket = self.conn.get_bucket(get_bucket_from_s3_uri(dest_id))
key = Key(bucket, get_key_from_s3_uri(dest_id))
key.delete()
我已经模拟和测试了_delete,现在我想测试重试逻辑。
我不能直接测试delete(),因为Key 不会被嘲笑。所以我希望做的事情如下:
decorated_fn = retry.retry_decorator(storage_backend._delete, delay=0.00001)
storage_backend.delete = decorated_fn
storage_backend.delete(...) ... # add assertions, etc.
这不起作用。我收到一个错误:
AttributeError: 'function' object has no attribute 'retry_decorator'
我认为问题在于retry decorator 本身已被装饰。
如何在我的delete() 方法上测试重试逻辑,以便可以模拟其内部对象,从而使延迟超时非常低?
【问题讨论】:
标签: python unit-testing mocking