模拟使用相对导入导入的模块的日志记录

时间:2017-08-21 14:17:19

标签: python unit-testing mocking

由于我们项目的结构和我们运行测试的方式,我们的库模块通过测试模块进行相对导入,例如:

from .. import foo_bar

现在,我想检查foo_bar模块中的某个函数是否发出某些参数的警告。我试过这个:

from unittest.mock import patch

@patch('foo_bar.logging')
def test_distance(mock_logging):
    foo_bar.baz(None)
    assert mock_logging.warn.called

我得到了这个:

target = 'foo_bar'

    def _importer(target):
        components = target.split('.')
        import_path = components.pop(0)
>       thing = __import__(import_path)
E       ImportError: No module named 'foo_bar'

/tmp/envs/foo/lib/unittest/mock.py:1058: ImportError

当我尝试更改这样的补丁行时:

@patch('..foo_bar.logging')

我收到了这个错误:

target = '..foo_bar'

    def _importer(target):
        components = target.split('.')
        import_path = components.pop(0)
>       thing = __import__(import_path)
E       ValueError: Empty module name

/tmp/envs/foo/lib/unittest/mock.py:1058: ValueError

在这些情况下,知道如何使用patch中的unittest.mock函数吗?

1 个答案:

答案 0 :(得分:1)

您可以使用导入的模块0.9333 0.7333 属性来实现相对导入模拟。

__name__