Reputation: 5744
I want to mock a class constructor in Python via mockito, i.e. return a Mock-class instance instead of the real one. Assuming you have an import statement in the form
from my.module import SomeClass
How can this be done? I've seen https://code-and-cocktails.herokuapp.com/blog/2015/01/19/mocking-class-constructor-in-python-with-mockito/ , which suggests
when(my.module).SomeClass().thenReturn(someFakeInstance)
however, this doesn't work with above's import statement for me; it only works when doing "import my.module" and instantiating via "my.module.SomeClass()".
Are there any viable solutions that work with the import statement above?
Thanks
Upvotes: 1
Views: 1156
Reputation: 558
What you tried is in general how it works, but since you do a deep import patching my.module
is not want you want. You want to patch the module this code lives in. Say it is in a file module_under_test.py
where you have
from x.y import SomeClass
Now, from the tests you look at it differently:
import module_under_test as mut
Now SomeClass
is at mut.SomeClass
, hence in the test you mock
when(mut).SomeClass(...)
This is super-confusing the first couple of times you're doing this, but not very special to mockito but how python works.
Upvotes: 4