Python 如何测试在tarfile.open上下文管理器中调用的函数?

Python 如何测试在tarfile.open上下文管理器中调用的函数?,python,unit-testing,pytest,tar,Python,Unit Testing,Pytest,Tar,我已经写了一个函数来创建一个tarball #tarball.py 导入操作系统 导入tarfile def create_tarball(): 以tarfile.open(“path/to/tar/file”,“w:gz”)作为tar: 加焦油( “/path/to/included/directory”, arcname=os.path.basename(“/path/to/included/directory”), ) 我在tarfile.open上下文管理器上编写了一个通过测试的断言

我已经写了一个函数来创建一个tarball

#tarball.py
导入操作系统
导入tarfile
def create_tarball():
以tarfile.open(“path/to/tar/file”,“w:gz”)作为tar:
加焦油(
“/path/to/included/directory”,
arcname=os.path.basename(“/path/to/included/directory”),
)
我在
tarfile.open
上下文管理器上编写了一个通过测试的断言

来自unittest.mock导入修补程序的

从tarball导入创建\u tarball
@修补程序(“tarball.tarfile.open”)
def测试创建tarball部分(模拟打开):
创建_tarball()
用(“path/to/tar/file”,“w:gz”)调用mock_open.assert_

如何为
tar文件内调用的函数编写测试。打开
上下文管理器?

要为
tar.add
函数编写测试,请执行以下操作

  • 修补
    os.path.basename
    函数
  • 创建一个模拟的
    tar。使用
  • 设置
    tar的值。将上下文管理器中的
    函数添加到MagicMock
  • 设置
    os.path.basename
    函数的返回值
  • 在模拟的
    os.path.basename
    tarfile.open
    函数上断言
  • 例如:

    来自unittest.mock导入补丁,MagicMock
    从tarball导入创建\u tarball
    @补丁(“tarball.os.path.basename”)
    @修补程序(“tarball.tarfile.open”)
    def test_create_tarball_full(模拟打开,模拟basename):
    mock_add=MagicMock()
    模拟\打开。返回\值。\输入\返回\值。添加=模拟\添加
    mock_basename.return_value=“/path/to/included/directory”
    创建_tarball()
    用(“path/to/tar/file”,“w:gz”)调用mock_open.assert_
    用(“/path/to/include/directory”)调用的mock\u basename.assert\u
    mock_add.assert_调用_with(
    “/path/to/included/directory”,arcname=“/path/to/included/directory”
    )