编写测试在任何编程语言中都是必不可少的,不管使用的是什么框架。在最近一个对我来说比较陌生的Python/Django项目中,我不得不写大量的测试。其中一些测试执行的是与互联网对话的代码。而在Python的生态系统中,MagicMock就可以帮助我们。
如何模拟一个外部的API,并在函数被连锁时返回值。下面是我的应用代码

上面的函数需要几个参数,请求对象和查询对象。它打开一个与该请求的url连接,并读取数据,解码为 "utf-8",最后解析这些数据。
对于我的测试,我不想真的打开这样一个连接,我想简单地模拟它。并让最后的数据变量持有一个简单的JSON字符串"{}"。虽然这是非常微不足道的,但我不得不做一些挖掘工作来得出解决方案。

魔术发生在return_value的初始化中。如果你看到我们的原始代码,我们需要对它进行多次模拟。这个链条是这样的:urlopen方法的结果应该有一个read方法,然后应该有一个decode方法,然后应该返回一个值"{}"。
这就是Python的unittest框架中的做法。希望这对你有用!
弗朗西斯科技术 法蓝瓷是一家技术公司,专注于以极快的速度提供高质量的规模化软件。数据的数字和大小让我们兴奋。如果你在构建大规模应用程序方面有任何要求,或者想对你的系统或架构进行免费的健康检查,请随时向contact@francium.tech,我们会与你联系!
使用MagicMock在Python中存根更深的方法最初发表在Medium上的Francium Tech,在那里人们通过强调和回应这个故事继续进行对话。