Python Pytest, unittest : Mocking out a non-existent imported module

  • Thread starter Thread starter Swamp Thing
  • Start date Start date
  • Tags Tags
    module
Click For Summary
To write a test module that mocks the import statement in the provider module, the key approach is to use `sys.modules` to replace the missing module with a mock. Instead of needing a full dotted path for the module, simply assigning `sys.modules['a_missing_module'] = Mock()` suffices. This method allows for effective testing of the client module that imports the `helper_function` from the provider, even when the actual implementation of the missing module is not included. This technique simplifies the mocking process when only specific functions are imported from a module.
Swamp Thing
Insights Author
Messages
1,035
Reaction score
771
TL;DR
A 'provider' module imports 'a_missing_module'. A 'client' module imports just one function from 'provider'. (It does not import the entire 'provider' module). How can we mock out 'a_missing_module' while testing?
The following provider module imports a_missing_module and implements a helper_function. (I haven't put in any code that actually uses the missing module, but there could be such code in general).
Code:
# provider.py
import a_missing_module

def helper_function():
    return 999

Now this client module imports the helper_function from the provider:
Code:
# client.py
from provider import helper_function

def client_function():
    return helper_function()

How can I write a test module that mocks out the import statement in the provider? In the past, I have used things like sys.modules['client.provider.missing_module'] = Mock() in cases where the client imports an entire provider module, but now it only imports a function from the provider, so I don't know how to proceed.
 
Technology news on Phys.org
Ok, got it after some trial and error. You just do sys.modules['a_missing_module'] = Mock(). You don't need to worry about a full dotted path to the module, unlike the more usual kind of mocking/patching.
 
  • Informative
Likes Wrichik Basu

Similar threads

Replies
7
Views
5K
Replies
9
Views
1K
Replies
4
Views
5K
Replies
18
Views
1K
Replies
1
Views
1K