Lazy Attributes and Methods

00:00 As you just saw, the now mocked json module doesn’t have the .dumps() method. The value of using these Mock objects comes in its flexibility,

00:12 so when you want to do something like patch the json module, you don’t want to go ahead and create every single method and attribute that the json module has. That would take forever.

00:23 What you want to be able to do is just mock the bits and pieces of it that you use in your program. Fortunately, you don’t have to do that. The Mock objects are super flexible and they actually create methods and attributes when you access them. So, as you’ve seen, when we printed out the dir() representation of jsonwhich is now a Mock object—it doesn’t have the .dumps() method.

00:50 Let’s go ahead and try an experiment here. Let’s call json.dumps() again after we’ve reassigned json to the mock object.

01:00 Since json doesn’t have a .dumps() method—we don’t see it in this dir() representation—we should probably get some type of exception.

01:10 Let’s go ahead and see if we can print(data).

01:16 Go down and clear the screen, run our program.

01:21 And that’s interesting—we actually get another Mock object. What happened here is that we called this .dumps() method, which didn’t exist, and when we called it, it actually created another Mock object.

01:37 So obviously, this isn’t really the true .dumps() method, and we can verify that by even deleting the arguments. So, the regular json.dumps() requires some arguments but if we save this and we call json.dumps() with no arguments, we run our program again—we’ll see that it still returns a Mock object and it doesn’t raise an exception or cause any error.

02:03 And this will accept any arguments that you want to pass to it. I could pass in, you know, whatever. Save that, run it again. We get a Mock object, no exception.

02:16 So the fact that when you create a method like .dumps() from a Mock object it will return another Mock object and it will accept any arguments that you pass to it—this feature of Mock objects is what allows a lot of flexibility and the ability to create more control and testing. And in the next video, we’re going to explore this idea some more.

Become a Member to join the conversation.