Я пытаюсь смоделировать библиотеку в Python 2.7 и сталкиваюсь с проблемами.То, что я в настоящее время работал, но я хотел бы расширить его, чтобы иметь возможность различать различные вызовы подпроцесса.Я хотел бы сделать это, прочитав второй элемент в моем массиве args, переданный в MockedPopen
.У меня проблемы с тем, что у меня нет доступа к этому значению при создании класса stdout
внутри MockedPopen
.Мой метод до этого момента - макетировать все до whmapicall.stdout.read()
, но я не могу передать себя в этот новый класс, потому что значение еще не создано.
class MockedPopen:
PIPE = None
def __init__(self, args, **kwargs):
self.args = args
self.returncode = 0
def __enter__(self):
return self
def __exit__(self, exc_type, value, traceback):
pass
@classmethod
def Popen(self, cmd , **kwargs):
return self
class stdout():
stdout = '''---
data:
acct:
-
bwusage:
-
deleted: 0
domain: hd.tld
usage: 771853
deleted: 0
limit: '88048926720'
maindomain: hd.tld
owner: root
reseller: 0
totalbytes: 771853
user: hd
month: 9
reseller: root
totalused: 232307616
year: 2019
metadata:
command: showbw
reason: OK
result: 1
version: 1'''
@classmethod
def read(self):
return self.stdout
Мойкласс теста
class TestInit:
@mock.patch('cpquotafix.subprocess', MockedPopen)
def testUsername(self):
user = cpquotafix.User("eddy","cthulhu","hd.tld","root", None ,"10000")
assert user.username == "eddy"
Код, который я хочу исправить
def setBandwidthLimit(self):
whmapicall = subprocess.Popen(["whmapi1" , "showbw", 'searchtype=user', 'search=^%s$' % self.username], stdout=subprocess.PIPE)
whmapireturn = whmapicall.stdout.read().split("\n")
def setPackageQuota(self):
whmapicall = subprocess.Popen(["whmapi1" , "getpkginfo", "pkg=%s" % self.plan], stdout=subprocess.PIPE)
whmapireturn = whmapicall.stdout.read().split("\n")