我的很多模拟用法都是在单元测试中,但我不确定是否可以使用模拟库进行生产,请考虑以下简单示例从外部源获取数据。
class Receiver(object):
def get_data(self):
return _call_api(...)
现在,我可以使用mock
库来更改get_data()
函数以便在生产时重新运行吗?
with patch('Receiver.get_data') as mock_get_data:
mock_get_data.return_values = [1, 2]
...
有些人可能会建议将另一个Rerun
接收器作为更好的方法,但我并不反对,但为了好奇,我仍在提出这个问题。
我的问题包括:
答案 0 :(得分:1)
没有。如果函数应该在生产中以某种方式运行,那么将其编码为行为。如果您需要回退或重试行为,那么模拟不是正确的方法。
答案 1 :(得分:1)
我同意,对于生产用途,具有重写Receiver
方法的get_data
子类会好得多。
原因很简单 - 如果每种类型的接收器只接收来自单个源的数据,那么您的代码将更容易阅读和维护。如果相同的Reciever
将最终从多个来源返回数据,那么代码将会令人困惑,您最终需要追捕是否从一个地方获取数据是否是您通过明确设置的数据mock
等等。