如何模拟函数中的特定行?

2024-09-28 01:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为我的函数编写测试,但不想执行其中的特定语句。我正在尝试模拟,但失败。任何建议都会有帮助。我正在使用pytest mock进行模拟

def listDataSetZOWE():
"""To list out all datasets in system"""
try:

    process = Popen([zowe_path, 'zos-files','list','data-set','XYZ*'], stdout=PIPE, stderr=PIPE, universal_newlines=True)
    stdout, stderr = process.communicate()
    print(stdout)
    process.kill()

except Exception as e:
    print(e)
    stderr=e

return stderr

我不希望下面两行在测试时被执行

 process = Popen([zowe_path, 'zos-files','list','data-set','XYZ*'], stdout=PIPE, stderr=PIPE, universal_newlines=True)
    stdout, stderr = process.communicate()

我的测试:

def test_listDataSetZOWE(mocker):
    mocker.patch("process = Popen([zowe_path, 'zos-files','list','data-set','MACK00*'], stdout=PIPE, stderr=PIPE, universal_newlines=True)","datasetobj")
    mocker.patch("stdout, stderr = process.communicate()","stderr")
    zowe.listDataSetZOWE()

其失败原因如下:

 TypeError: Need a valid target to patch. You supplied: "process = Popen([zowe_path, 'zos-files','list','data-set','MACK00*'], stdout=PIPE, stderr=PIPE, universal_newlines=True)"

Tags: pathtruedatastderrstdoutfilesprocessuniversal

热门问题