У меня есть метод под тестом, который выглядит следующим образом:Выполнить метод экземпляра с определенным возвращаемым значением?
def execute_update(self):
"""Execute an update."""
p = subprocess.Popen(['command'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
try:
stdout, stderr = p.communicate()
if p.returncode == 0:
# successful update, notify
self.logger.info("Successfully updated.")
else:
# failed update, notify
self.logger.error("Unable to update (code {returncode}):\n{output}".format(
returncode=p.returncode, output=stdout))
except KeyboardInterrupt as e:
# terminate the process
p.terminate()
raise e
Я пытаюсь проверить его вызов Popen и его вызов функций лесозаготовок в методе unittest.TestCase
теста с mock
:
@mock.patch.object(subprocess.Popen, 'communicate', autospec=True)
@mock.patch('updateservice.subprocess.Popen', autospec=True)
def test_fetch_metadata(self, mock_popen, mock_communicate):
"""Test that we can fetch metadata correctly."""
mock_communicate.return_value = ("OUT", "ERR")
mock_popen.returncode = 0
self.reference.execute_update()
# other asserts
последняя строка завершается с:
stdout, stderr = p.communicate()
ValueError: need more than 0 values to unpack
Что я делаю неправильно? У меня есть следующие требования:
- Протестировано, что конструктор
subprocess.Popen
был вызван с правильными значениями. - Проверьте, что вызовы протоколирования работают с кодом вывода и возврата из процесса.
номер два достаточно легко, я просто нагнетание MagicMock как объект регистратора, но я "возникают проблемы с номером один.
Попробуйте установить значение 'return_value' в строке' @ mock.patch.object'. – kindall
Пробовал, что, такая же ошибка. –
, как сказано в ошибке, вы перехватываете два значения в возврате ... из-за этого ваше значение return_value должно быть кортежем, например. (0,0) – Aquiles