Насмешливые вызовы подпроцесса в Python - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь использовать декоратор mock.patch в фиктивной библиотеке, но у меня проблемы.У меня есть эта функция инициализации, где я делаю два вызова подпроцесса.Первый раз в 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), но я не могу заставить их работать.Как бы я протестировал функцию инициализации, как это, исправляя вещи, которые я не могу иметь в своей среде?Заранее спасибо за любую помощь.

1 Ответ

1 голос
/ 26 сентября 2019

Я понимаю из вашего вопроса, что вы хотите сделать фиктивное исправление вызова Subprocess.Popen () из вашего файла.Для этого вам следует использовать следующий подход: -

Давайте возьмем сценарий, в котором указано имя вашего файла, для которого вы хотите создать юнит-тест.Поэтому: - в файле unittest вы должны написать: -

import library

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

Надеюсь, вы найдете свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...