繁体   English   中英

Mocking Python 中的子进程调用

[英]Mocking Subproces Calls in Python

我正在尝试在模拟库中使用mock.patch装饰器,但遇到了问题。 我有这个 init function 在那里我进行了两个子进程调用。 第一次在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)但我似乎无法让它工作。 在修补环境中无法拥有的东西的同时,我将如何测试这样的初始化函数? 提前感谢您的帮助。

我从您的问题中了解到您想从您的文件中模拟修补 Subprocess.Popen() 调用。 为此,您应该使用以下方法:-

让我们假设您的文件名是您要为其创建单元测试的场景。 因此:- 在 unittest 文件中,您应该写:-

import library

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

我希望你能找到你的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM