返されたdatetimeオブジェクトは、そのオブジェクトが絶えず変化している場合、どのように模擬しますか?py.test:常に変化しているdatetimeオブジェクトの模倣
たとえば、私はいくつかのtimeseriesデータを取得し、一連のdatetimeオブジェクトとして返すいくつかのコードを持っています。
だから、照会APIからの戻りデータは以下のようになります:
{
'from_date': 1497881400000.0,
'group_by': [],
'message': '',
'query': 'avg:system.load.norm.5{role:lb}',
'res_type': 'time_series',
'resp_version': 1,
'series': [{'aggr': 'avg',
'attributes': {},
'display_name': 'system.load.norm.5',
'end': 1497709799000,
'expression': 'avg:system.load.norm.5{role:lb}',
'interval': 1,
'length': 60,
'metric':
'avg:system.load.norm.5{role:lb}',
'pointlist': [[1497881400000.0,
0.06923198629355053],
[.. 60 more points]],
'query_index': 0,
'scope': 'role:lb',
'start': 1497709742000,
'unit': [None, None]}],
'status': 'ok',
'to_date': 1497709800000
}
と私のコードは、この行います。上記のAPIデータの場合には、このようになります
from typing import NamedTuple
class SampleMetric(NamedTuple):
query: str
time: datetime.datetime
value: int
pointlist = api_query['series'][0]['pointlist']
return [SampleMetric(query=metric,
time=datetime.datetime.fromtimestamp(
point[0]/1000),
value=point[1]) for point in pointlist]
を:
[SampleMetric(query='avg:system.load.norm.5{role:lb}', time=datetime.datetime(2017, 10, 20, 11, 2), value=231.8605833053589),
SampleMetric(query='avg:system.load.norm.5{role:lb}', time=datetime.datetime(2017, 10, 20, 11, 3), value=243.17432022094727),...]
私は簡単に私たちの電子辞書として辞書を返すモックAPIオブジェクトを作成することができますxampleは上記のとおりですが、返されるdatetimeオブジェクトの変更を模擬するのは本当に苦労しています。
すなわち time=datetime.datetime(2017, 10, 20, 11, 2)
誰も私にこれを行う方法上の任意のアイデアをしてください与えることはできますか?現時点では、私のリターンデータを1タイムリーに示すだけで時間価値をハードコーディングすることでこれを回避していますが、これは実際の世界テストではないと感じています。
PLEASEは、この例で使用される実際の値を無視し、私は彼らが間違っている知っているが、私は私が何を意味するかを説明するのに苦労していますので、これは説明目的のためだけです。
テストしようとしているシンプルなコードの具体例を示し、テストがなぜ書きにくいのかを説明すると、より役立つ回答が得られます。私はあなたが意味するものを推測しましたが、わかりません。 –