Python中mock及monkeypatch工具
Python中mock及monkeypatch工具,我们的应用中有一些部分需要依赖外部的库或对象。为了隔离开这部分,我们需要代替这些外部依赖,因而就用到了模拟数据。我们模拟外部的API来产生特定的行为,比如说返回符合之前定义的恰当的返回值。
模拟函数
我们有一个function.py的模块:
然后我们来看下如何将其与Mock库结合使用的:
这里发生了什么?1-4行是为了兼容python2和3来引入的代码,在python3中mock是一个标准库,而在python2中你需要手动安装(pipinstallmock)。
在第13行对square函数调用mock的Patch方法,一定要在使用该函数的地方调用patch方法。比如,我将在程序自身中调用square(5)函数,因而我在__main__中使用patch,举例来说pythontests/test_function.py。而如果我使用pytest的话,那么我将使用test_function.square来替换此处的__main__.square。
在第18-19行,我针对square和cube方法调用了patch函数,因为它们将在main函数中被使用。最后的两个assert语句是为了确保mock被恰当地使用。
同样也可以用monkeypatching来完成此工作:
你能看到我使用monkeypatch.setattr来针对给定的函数设置返回值,同样我也需要在恰当的地方调用monkeypatch函数。
模拟类
我有一个名叫square的模块:
使用方法如下:
在第13行我对类Square进行patch,而15和16行表示了mocking的实例,首先mocked_instance是一个模拟对象,针对mock.calculate_area我添加了return_value的值为1.在23行我使用MagicMock方法,它同样是一个标准的mock类,只是它可以从一个给定的对象中检索出相应的方法。最后我使用patch.object来模拟Square类中的方法。
Pytest中代码如下:
这里的问题在于test_mocking_class_methods在python3中工作正常,但是python2中却不行。目前我还没有太想清楚这一点,希望你能帮助我!
所有的示例都能在这里找到。
Python培训、Python培训班、Python培训机构,就选光环大数据!
还不够过瘾?想学习更多?点击 http://hadoop.aura.cn/python/ 进行Python学习!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服!