【问题标题】:How to mock the existence of a particular file in python unit test?如何在 python 单元测试中模拟特定文件的存在?
【发布时间】:2017-03-04 09:26:12
【问题描述】:

我正在为 python 中的嵌入式软件代码编写单元测试。

其中一个文件需要特定文件才能存在。 (例如“/dir_name/file_name.txt”)否则会引发错误。

通常,此文件存在于硬件设备上,我的 python 代码会读取此文件。在为python代码编写单元测试时,如何模拟文件的存在?

tempfile.mkstemp() 似乎没有生成我想要的确切路径/文件名,即/dir_name/file_name.txt。它总是添加一些随机字母。

这是使用 Python3.4 的。 unittest.mock 可以做到这一点吗?

【问题讨论】:

  • 真的需要这个罚款吗?或者,或者您是在问如何模拟它,以便您正在测试的任何东西认为它存在?您能否提供代码示例以及您正在测试的内容?我想我有一个想法,但我想看看你目前的方法是什么。
  • 不,它不需要存在。只要我可以让我的代码相信文件存在,那就没问题了。
  • 优秀。你能展示一些代码来了解如何满足解决方案吗?这里有不同的选择,但很高兴了解您当前的方法是如何提供更相关的解决方案。
  • 另一个复杂情况是,当我执行import module_A 时会发生这种情况。当我这样做import 时,它需要该文件(或者我们需要让它相信该文件存在),这有点棘手......import module_A 是在文件不存在时引发异常的地方。
  • 是不是因为你在全局空间中设置你的文件?如果这样做,则该空间中的任何代码都将在导入模块时执行。

标签: python unit-testing nose python-unittest


【解决方案1】:

您可以创建一个上下文管理器来创建和删除文件。

from contextlib import contextmanager

@contextmanager
def mock_file(filepath, content=''):
    with open(filepath, 'w') as f:
        f.write(content)
    yield filepath
    try:
        os.remove(filepath)
    except Exception:
        pass


def test_function():
    with mock_file(r'/dirname/filename.txt'):
        function()

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2017-06-14
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多