无法模拟方法

时间:2018-09-19 07:57:45

标签: python unit-testing mocking

我有这段代码要在some_module.py中单独测试

Sub CommandButton1_Click()
    pdfName = ActiveSheet.Range("G5") 'PDF name
    ChDir ActiveWorkbook.Path & ":" 'Use the files directory
    FileSaveName = ActiveSheet.Range("G5") 'Name the PDF file

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    FileSaveName, Quality:=xlQualityStandard, IncludeDocProperties:=True, OpenAfterPublish:=False

    MsgBox "File Saved as " & " " & FileSaveName
End Sub

而且我无法有效地模拟tarfile方法,因此无需从实际文件中读取就可以模拟tar文件,我目前的尝试如下所示

targetWeekStart.plusDays(daysBetweenSourceWeekStartAndDayToCopy)

这不起作用,在测试方法中对“ getmembers”的调用只会返回另一个MagicMock对象,而不是我提供的字符串列表,因此不会进行应有的迭代。过去我已经通过类似的行为实现了我的目的,但是我不明白为什么这在这里行不通。

1 个答案:

答案 0 :(得分:3)

您在return_valueopen_mock之间缺少getmembers。定义完模拟之后,您需要说一下该模拟方法将要返回的内容。 就是您要在要测试的方法中调用getmembers的内容。您的测试将如下所示:

import tarfile
from unittest.mock import patch, Mock
from some_module import function_to_test

def test_DeepLabModel_unexistent_error():
    tar_path = "/path/to/nowhere"

    with patch.object(tarfile, 'open', autospec=True) as open_mock:
        open_mock.return_value.getmembers.return_value = ['a','b']
        get_members(tar_path)

请注意,我也将导入移动到了顶部。