So lets say we need to write unit test for piece of code that uses __import__ built-in function:
def task_we_want_to_test(task_name: str, task_class: str, env: dict) -> Task:
module = __import__(
'my_project.scripts.{}'.format(task_name),
fromlist=[task_class, ])
klass = getattr(module, task_class)
return klass(env)
You can test this code like this:
def test_get_task(self):
from my_project.scripts import task_we_want_to_test
MyScript = mock.MagicMock()
_import = mock.MagicMock()
_import.MyScript = MyScript
with mock.patch.dict(
'sys.modules',
{'my_project.scripts.my_script': _import},
):
klass = task_we_want_to_test('my_script', self.env)
MyScript.assert_called_with(self.env)
self.assertEqual(klass, MyScript(self.env))