是否可以使用python mock进行生产?

时间:2016-07-18 02:19:48

标签: python

我的很多模拟用法都是在单元测试中,但我不确定是否可以使用模拟库进行生产,请考虑以下简单示例从外部源获取数据。

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接收器作为更好的方法,但我并不反对,但为了好奇,我仍在提出这个问题。

我的问题包括:

  1. 如果不是,原因是什么?
  2. 如果是,有什么警告吗?

2 个答案:

答案 0 :(得分:1)

没有。如果函数应该在生产中以某种方式运行,那么将其编码为行为。如果您需要回退或重试行为,那么模拟不是正确的方法。

答案 1 :(得分:1)

我同意,对于生产用途,具有重写Receiver方法的get_data子类会好得多。

原因很简单 - 如果每种类型的接收器只接收来自单个源的数据,那么您的代码将更容易阅读和维护。如果相同的Reciever将最终从多个来源返回数据,那么代码将会令人困惑,您最终需要追捕是否从一个地方获取数据是否是您通过明确设置的数据mock等等。