【问题标题】:Mock doesn't work in unittest for Python 2.7Mock 在 Python 2.7 的单元测试中不起作用
【发布时间】:2019-12-02 23:50:52
【问题描述】:

我有一个这样的项目结构:

py_test
   |
   +---my_module
   |    |  
   |    +--- __init__.py (empty)
   |    |
   |    +--- futil.py
   |
   +---test
        |
        +--- __init__.py (empty)
        |
        +--- futil_test.py

futil.py 我有以下内容:

from os import path


def check_exists(file_path):
    return path.exists(file_path)

futil_test.py 中,我正在尝试实现这样的单元测试:

import mock
import unittest

from my_module.futil import check_exists


class TestExists(unittest.TestCase):

    @mock.patch('my_module.futil.os.path')        # <---leads to error, as well as my_module.os.path
    def test_exists(self, mock_path):
        mock_path.exists.return_value = True
        self.assertTrue(check_exists('ba'))


if __name__ == '__main__':
    unittest.main()

当我尝试启动单元测试时,它失败并出现错误:

Error
Traceback (most recent call last):
  File "/usr/lib64/python2.7/unittest/case.py", line 367, in run
    testMethod()
  File "/home/antonio/devel/py/py_test/venv/lib/python2.7/site-packages/mock/mock.py", line 1322, in patched
    arg = patching.__enter__()
  File "/home/antonio/devel/py/py_test/venv/lib/python2.7/site-packages/mock/mock.py", line 1378, in __enter__
    self.target = self.getter()
  File "/home/antonio/devel/py/py_test/venv/lib/python2.7/site-packages/mock/mock.py", line 1548, in <lambda>
    getter = lambda: _importer(target)
  File "/home/antonio/devel/py/py_test/venv/lib/python2.7/site-packages/mock/mock.py", line 1235, in _importer
    thing = _dot_lookup(thing, comp, import_path)
  File "/home/antonio/devel/py/py_test/venv/lib/python2.7/site-packages/mock/mock.py", line 1224, in _dot_lookup
    __import__(import_path)
ImportError: No module named os

在示例here 中,类似的构造似乎在起作用。我做错了什么?

【问题讨论】:

  • "from os import path",将使路径功能成为 futil 的一部分。而不是模拟“my_module.futil.os.path'”只是模拟“my_module.futil.path'”,应该可以。
  • 天哪,谢谢!确实,工作正常
  • 过去我发现这篇文章非常有用alexmarandon.com/articles/python_mock_gotchas
  • 请将此贴到答案中,以便我可以将问题标记为已回答

标签: python python-2.7 unit-testing


【解决方案1】:

"from os import path",将使路径功能成为 futil 的一部分。而不是模拟“my_module.futil.os.path”,而是模拟“my_module.futil.path”,应该可以。

过去我发现这篇文章非常有用http://alexmarandon.com/articles/python_mock_gotchas/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2021-06-26
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多