我有此代码要测试(简化):
def foo(job):
stop1 = job.stops.get(stop_number=1)
stop1.departed_at = first_scan['scan_date']
stop2 = job.stops.get(stop_number=2)
stop2.pod_time = pod['received_date']
所以我是这样做的:
job = Mock()
foo(job)
self.assertIsInstance(job.sync_at, datetime.datetime)
self.assertAlmostEqual(job.booked_at, isoformat('2019-10-01T00:00:00'))
self.assertAlmostEqual(job.stops.get(stop_number=1).departed_at, isoformat('2019-10-07T05:24:47'))
self.assertAlmostEqual(job.stops.get(stop_number=2).pod_time, isoformat('2019-10-07T12:00:00'))
问题是job.stops.get方法返回具有任何参数值的相同对象:
>>> job.stops.get(stop_number=1)
<Mock name='mock.stops.get()' id='140194394261936'>
>>> job.stops.get(stop_number=2)
<Mock name='mock.stops.get()' id='140194394261936'>
>>>
因此,在测试上述代码时,我让job.stops.get(stop_number=1)
和job.stops.get(stop_number=2)
返回相同的输出,同时设置了departed_at
和pod_time
属性。因此,我不确定pod_time
是否设置为stop2而不是stop1,反之亦然
问题是如何使mock
返回与stop_number
值相关的不同的实例
您可以为} 属性分配一个可调用属性。使可调用函数根据不同的输入参数返回不同的对象:
Mock
对象的^{相关问题 更多 >
编程相关推荐