在Python中模拟子程序调用

2024-09-30 01:26:33 发布

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

我试图在模拟库中使用mock.patch装饰器,但遇到了问题。我有一个init函数,在这里我调用了两个子进程。第一次是在self.setPackageQuota(),第二次是在self.setBandwidthLimit()

class User():
    def __init__(self, username, plan, domain, owner, diskQuota, diskUsed):
        self.setUsername(username)
        self.setPlan(plan)
        self.setDomain(domain)
        self.setOwner(owner)
        self.setDiskQuota(diskQuota)
        self.setDiskUsed(diskUsed)
        self.setPackageQuota()
        self.setBandwidthLimit()

self.setPackageQuota()

def setBandwidthLimit(self):
    whmapicall   = subprocess.Popen(["whmapi1" , "showbw", 'searchtype=user', 'search=^%s$' % self.username], stdout=subprocess.PIPE)
    whmapireturn = whmapicall.stdout.read().split("\n")
    for line in whmapireturn:

self.setPackageQuota()

def setPackageQuota(self):
    whmapicall   = subprocess.Popen(["whmapi1" , "getpkginfo", "pkg=%s" % self.plan], stdout=subprocess.PIPE)
    whmapireturn = whmapicall.stdout.read().split("\n")
    for line in whmapireturn:

我宁愿把whmapireturn修补成别的东西。我也不想不运行subprocess.Popen。我最初的想法是修补@mock.patch('subprocess.Popen', MockedClass)@mock.patch('whmapireturn', OtherMockedClass),但我似乎无法让它发挥作用。我该如何测试这样的初始化功能,同时修补在我的环境中无法拥有的东西?事先谢谢你的帮助


Tags: selfinitdomaindefstdoutusernamemockpatch
1条回答
网友
1楼 · 发布于 2024-09-30 01:26:33

我从您的问题中了解到,您希望模拟修补文件中的Subprocess.Popen()调用。为此,您应该使用以下命令approach:- 你知道吗

假设您的文件名是要为其创建unittest的文件名。Therefore:- in unittest文件,你应该write:- 你知道吗

import library

@mock.patch("library.subprocess")
def test_subprocess_call(mock_subprocess):
    mock_subprocess.Popen.return_value = None

我希望你能找到答案

相关问题 更多 >

    热门问题