未加星标

Mocking classes and overriding methods in Python

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

I have this class Waterfall :

class Waterfall: def height_in_feet(self): # calls https://nicaragua.waterfall.com/height return 164

It's making web service calls to Nicaragua all the time, requiring me to be online whenever I run my tests:

import unittest class ExploringMocking(unittest.TestCase): def test_using_the_real_class(self): waterfall = Waterfall() assert waterfall.height_in_feet() == 164

For this reason, I'd like to mock the Waterfall class (as it has so many methods and I want the method signatures to all be correct, I use unittest.mock.create_autospec ) and provide my own implementation of the height_in_feet() method:

import types import unittest.mock class ExploringMocking(unittest.TestCase): def test_mocking_a_class(self): waterfall = unittest.mock.create_autospec(Waterfall) waterfall.height_in_feet = types.MethodType(self.my_height_func, self) assert waterfall.height_in_feet() == 10 def my_height_func(self, ref): return 10

The essential bit here is the types.MethodType which is what you need to do when overriding the method on a class instance . Just doing waterfall.hight_in_feet = self.my_height_func will not cut it.

With this in place, I can implement any logic I want in my_height_func which will get executed whenever Waterfall#height_in_feet() would have been. This is very useful when passing this mock instance of Waterfall around to other components.

Happy testing!

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

代码区博客精选文章
分页:12
转载请注明
本文标题:Mocking classes and overriding methods in Python
本站链接:https://www.codesec.net/view/611085.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(73)