Best Python code snippet using autotest_python
mock.py
Source:mock.py
...108 if key not in dargs:109 return False110 return True111 def __str__(self):112 return _dump_function_call(self.symbol, self.args, self.dargs)113class function_mapping(base_mapping):114 def __init__(self, symbol, return_val, *args, **dargs):115 super(function_mapping, self).__init__(symbol, return_val, *args,116 **dargs)117 def and_return(self, return_obj):118 self.return_obj = return_obj119 def and_raises(self, error):120 self.error = error121class function_any_args_mapping(function_mapping):122 """A mock function mapping that doesn't verify its arguments."""123 def match(self, *args, **dargs):124 return True125class mock_function(object):126 def __init__(self, symbol, default_return_val=None,127 record=None, playback=None):128 self.default_return_val = default_return_val129 self.num_calls = 0130 self.args = []131 self.dargs = []132 self.symbol = symbol133 self.record = record134 self.playback = playback135 self.__name__ = symbol136 def __call__(self, *args, **dargs):137 self.num_calls += 1138 self.args.append(args)139 self.dargs.append(dargs)140 if self.playback:141 return self.playback(self.symbol, *args, **dargs)142 else:143 return self.default_return_val144 def expect_call(self, *args, **dargs):145 mapping = function_mapping(self.symbol, None, *args, **dargs)146 if self.record:147 self.record(mapping)148 return mapping149 def expect_any_call(self):150 """Like expect_call but don't give a hoot what arguments are passed."""151 mapping = function_any_args_mapping(self.symbol, None)152 if self.record:153 self.record(mapping)154 return mapping155class mask_function(mock_function):156 def __init__(self, symbol, original_function, default_return_val=None,157 record=None, playback=None):158 super(mask_function, self).__init__(symbol,159 default_return_val,160 record, playback)161 self.original_function = original_function162 def run_original_function(self, *args, **dargs):163 return self.original_function(*args, **dargs)164class mock_class(object):165 def __init__(self, cls, name, default_ret_val=None,166 record=None, playback=None):167 self.__name = name168 self.__record = record169 self.__playback = playback170 for symbol in dir(cls):171 if symbol.startswith("_"):172 continue173 orig_symbol = getattr(cls, symbol)174 if callable(orig_symbol):175 f_name = "%s.%s" % (self.__name, symbol)176 func = mock_function(f_name, default_ret_val,177 self.__record, self.__playback)178 setattr(self, symbol, func)179 else:180 setattr(self, symbol, orig_symbol)181 def __repr__(self):182 return '<mock_class: %s>' % self.__name183class mock_god(object):184 NONEXISTENT_ATTRIBUTE = object()185 def __init__(self, debug=False, fail_fast=True, ut=None):186 """187 With debug=True, all recorded method calls will be printed as188 they happen.189 With fail_fast=True, unexpected calls will immediately cause an190 exception to be raised. With False, they will be silently recorded and191 only reported when check_playback() is called.192 """193 self.recording = collections.deque()194 self.errors = []195 self._stubs = []196 self._debug = debug197 self._fail_fast = fail_fast198 self._ut = ut199 def set_fail_fast(self, fail_fast):200 self._fail_fast = fail_fast201 def create_mock_class_obj(self, cls, name, default_ret_val=None):202 record = self.__record_call203 playback = self.__method_playback204 errors = self.errors205 class cls_sub(cls):206 cls_count = 0207 # overwrite the initializer208 def __init__(self, *args, **dargs):209 pass210 @classmethod211 def expect_new(typ, *args, **dargs):212 obj = typ.make_new(*args, **dargs)213 mapping = base_mapping(name, obj, *args, **dargs)214 record(mapping)215 return obj216 def __new__(typ, *args, **dargs):217 return playback(name, *args, **dargs)218 @classmethod219 def make_new(typ, *args, **dargs):220 obj = super(cls_sub, typ).__new__(typ, *args,221 **dargs)222 typ.cls_count += 1223 obj_name = "%s_%s" % (name, typ.cls_count)224 for symbol in dir(obj):225 if (symbol.startswith("__") and226 symbol.endswith("__")):227 continue228 if isinstance(getattr(typ, symbol, None), property):229 continue230 orig_symbol = getattr(obj, symbol)231 if callable(orig_symbol):232 f_name = ("%s.%s" %233 (obj_name, symbol))234 func = mock_function(f_name,235 default_ret_val,236 record,237 playback)238 setattr(obj, symbol, func)239 else:240 setattr(obj, symbol,241 orig_symbol)242 return obj243 return cls_sub244 def create_mock_class(self, cls, name, default_ret_val=None):245 """246 Given something that defines a namespace cls (class, object,247 module), and a (hopefully unique) name, will create a248 mock_class object with that name and that possessess all249 the public attributes of cls. default_ret_val sets the250 default_ret_val on all methods of the cls mock.251 """252 return mock_class(cls, name, default_ret_val,253 self.__record_call, self.__method_playback)254 def create_mock_function(self, symbol, default_return_val=None):255 """256 create a mock_function with name symbol and default return257 value of default_ret_val.258 """259 return mock_function(symbol, default_return_val,260 self.__record_call, self.__method_playback)261 def mock_up(self, obj, name, default_ret_val=None):262 """263 Given an object (class instance or module) and a registration264 name, then replace all its methods with mock function objects265 (passing the orignal functions to the mock functions).266 """267 for symbol in dir(obj):268 if symbol.startswith("__"):269 continue270 orig_symbol = getattr(obj, symbol)271 if callable(orig_symbol):272 f_name = "%s.%s" % (name, symbol)273 func = mask_function(f_name, orig_symbol,274 default_ret_val,275 self.__record_call,276 self.__method_playback)277 setattr(obj, symbol, func)278 def stub_with(self, namespace, symbol, new_attribute):279 original_attribute = getattr(namespace, symbol,280 self.NONEXISTENT_ATTRIBUTE)281 # You only want to save the original attribute in cases where it is282 # directly associated with the object in question. In cases where283 # the attribute is actually inherited via some sort of hierarchy284 # you want to delete the stub (restoring the original structure)285 attribute_is_inherited = (hasattr(namespace, '__dict__') and286 symbol not in namespace.__dict__)287 if attribute_is_inherited:288 original_attribute = self.NONEXISTENT_ATTRIBUTE289 newstub = (namespace, symbol, original_attribute, new_attribute)290 self._stubs.append(newstub)291 setattr(namespace, symbol, new_attribute)292 def stub_function(self, namespace, symbol):293 mock_attribute = self.create_mock_function(symbol)294 self.stub_with(namespace, symbol, mock_attribute)295 def stub_class_method(self, cls, symbol):296 mock_attribute = self.create_mock_function(symbol)297 self.stub_with(cls, symbol, staticmethod(mock_attribute))298 def stub_class(self, namespace, symbol):299 attr = getattr(namespace, symbol)300 mock_class = self.create_mock_class_obj(attr, symbol)301 self.stub_with(namespace, symbol, mock_class)302 def stub_function_to_return(self, namespace, symbol, object_to_return):303 """Stub out a function with one that always returns a fixed value.304 @param namespace The namespace containing the function to stub out.305 @param symbol The attribute within the namespace to stub out.306 @param object_to_return The value that the stub should return whenever307 it is called.308 """309 self.stub_with(namespace, symbol,310 lambda *args, **dargs: object_to_return)311 def _perform_unstub(self, stub):312 namespace, symbol, orig_attr, new_attr = stub313 if orig_attr == self.NONEXISTENT_ATTRIBUTE:314 delattr(namespace, symbol)315 else:316 setattr(namespace, symbol, orig_attr)317 def unstub(self, namespace, symbol):318 for stub in reversed(self._stubs):319 if (namespace, symbol) == (stub[0], stub[1]):320 self._perform_unstub(stub)321 self._stubs.remove(stub)322 return323 raise StubNotFoundError()324 def unstub_all(self):325 self._stubs.reverse()326 for stub in self._stubs:327 self._perform_unstub(stub)328 self._stubs = []329 def __method_playback(self, symbol, *args, **dargs):330 if self._debug:331 print >> sys.__stdout__, (' * Mock call: ' +332 _dump_function_call(symbol, args, dargs))333 if len(self.recording) != 0:334 func_call = self.recording[0]335 if func_call.symbol != symbol:336 msg = ("Unexpected call: %s\nExpected: %s"337 % (_dump_function_call(symbol, args, dargs),338 func_call))339 self._append_error(msg)340 return None341 if not func_call.match(*args, **dargs):342 msg = ("Incorrect call: %s\nExpected: %s"343 % (_dump_function_call(symbol, args, dargs),344 func_call))345 self._append_error(msg)346 return None347 # this is the expected call so pop it and return348 self.recording.popleft()349 if func_call.error:350 raise func_call.error351 else:352 return func_call.return_obj353 else:354 msg = ("unexpected call: %s"355 % (_dump_function_call(symbol, args, dargs)))356 self._append_error(msg)357 return None358 def __record_call(self, mapping):359 self.recording.append(mapping)360 def _append_error(self, error):361 if self._debug:362 print >> sys.__stdout__, ' *** ' + error363 if self._fail_fast:364 raise CheckPlaybackError(error)365 self.errors.append(error)366 def check_playback(self):367 """368 Report any errors that were encounterd during calls369 to __method_playback().370 """371 if len(self.errors) > 0:372 if self._debug:373 print '\nPlayback errors:'374 for error in self.errors:375 print >> sys.__stdout__, error376 if self._ut:377 self._ut.fail('\n'.join(self.errors))378 raise CheckPlaybackError379 elif len(self.recording) != 0:380 errors = []381 for func_call in self.recording:382 error = "%s not called" % (func_call,)383 errors.append(error)384 print >> sys.__stdout__, error385 if self._ut:386 self._ut.fail('\n'.join(errors))387 raise CheckPlaybackError388 self.recording.clear()389 def mock_io(self):390 """Mocks and saves the stdout & stderr output"""391 self.orig_stdout = sys.stdout392 self.orig_stderr = sys.stderr393 self.mock_streams_stdout = StringIO.StringIO('')394 self.mock_streams_stderr = StringIO.StringIO('')395 sys.stdout = self.mock_streams_stdout396 sys.stderr = self.mock_streams_stderr397 def unmock_io(self):398 """Restores the stdout & stderr, and returns both399 output strings"""400 sys.stdout = self.orig_stdout401 sys.stderr = self.orig_stderr402 values = (self.mock_streams_stdout.getvalue(),403 self.mock_streams_stderr.getvalue())404 self.mock_streams_stdout.close()405 self.mock_streams_stderr.close()406 return values407def _arg_to_str(arg):408 if isinstance(arg, argument_comparator):409 return str(arg)410 return repr(arg)411def _dump_function_call(symbol, args, dargs):412 arg_vec = []413 for arg in args:414 arg_vec.append(_arg_to_str(arg))415 for key, val in dargs.iteritems():416 arg_vec.append("%s=%s" % (key, _arg_to_str(val)))...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!