我是单元测试新手。我想测试装饰器MemorizeData。
函数get_data获取一些数据并持续一段时间,所以想法是创建装饰器,它将添加新的功能(如果数据是相当新的[在time_in_seconds之前检索得少]函数get_data将返回旧数据,否则它将检索并返回新数据)。
我怎么能测试这个装饰器?
import datetime
import unittest
import mock
from threading import Lock
class MemorizeData(object):
def __init__(self, time_in_seconds):
self.seconds = time_in_seconds
self.data_dict = {}
self.time_start_point = None
self.thread_lock = Lock()
def __call__(self, function):
def wrapper(*args, **kwargs):
with self.thread_lock:
if self.time_start_point is None:
self.data_dict = function(*args, **kwargs)
self.time_start_point = datetime.now()
else:
time_diff = datetime.now() - self.time_start_point
elapsed_seconds = int(time_diff.total_seconds())
if elapsed_seconds > self.seconds:
self.data_dict = function(*args, **kwargs)
self.time_start_point = None
return self.data_dict
return wrapper
@MemorizeData(6)
def get_data():
# getting data from a file
return {
1: {...},
2: {...},
...
}我试过类似的东西,但不知道如何在这里捕捉持续时间。
def test_memorize_data(self):
data_returned_by_func = {1: 'a', 2: 'b'}
func = mock.Mock(return_value=data_returned_by_func)
decorated_func = MemorizeData(6).__call__(func)
returned_data = decorated_func()
self.assertEqual(returned_data, data_returned_by_func)谢谢 :)