我想模拟类方法在内部使用的api调用。
到目前为止,我已经拥有了:
@mock.patch("time.perf_counter", side_effect=lambda: 4)
def test_response_expiration(response_store):
response_store.ttl = 2
responses = [
Response(status=200, url="foo", response_time=10, timestamp=1),
Response(status=200, url="foo", response_time=10, timestamp=2),
]
response_store.add(*responses) #add() uses time.perf_counter() internally
问题是,当我打印respone_store
时,我在stdout上看到以下内容:
<MagicMock name='time' id='4455108176'>
我不明白为什么会这样-为什么它会模拟出整个response_store
对象?我希望它仅模拟time.perf_counter
我正在使用pytest
答案 0 :(得分:0)
从某种意义上讲,这并不是完全模拟整个response_store
对象。装饰器将结果模拟从补丁传递到您的函数。由于您没有向其中添加其他参数,例如
@mock.patch("time.perf_counter", side_effect=lambda: 4)
def test_response_expiration(response_store, my_mock):
...
它将生成的补丁模拟分配给第一个参数response_store
。因为它是模拟的,所以response_store
的每次进一步使用或调用都会被该模拟的可塑性行为接受。