jeudi 22 novembre 2018

Mocking imported class in Python

I am trying to mock a class which is called in a module which imports said class, which I want to test.

# application.py
from my_module.my_submodule import MyClass

def my_function(var1):
    instance = MyClass()

    instance.some_function(var1)

and my testing file

# test_application.py
import mock
import application

def test_my_function():
    with mock.patch('my_module.my_submodule.MyClass') as MockClass:
        application.my_function(var1)

        MockClass.assert_called()        

This gives an error saying MockClass was not called.

Now, by looking at this question: Why python mock patch doesn't work?, I was inspired to change the application.py import to this

# application.py
import my_module.my_submodule as mysub

def my_function(var1):
    instance = mysub.MyClass()

    instance.some_function(var1)

that is, I don't directly import the class that I want to mock in the test. Now it works.

My question is, if this is working as intended, or I am doing something wrong in the original way? Is it really necessary to always import modules like this, if I want to mock a class used in a module I want to test?

Aucun commentaire:

Enregistrer un commentaire