Как я могу протестировать список вызовов методов в Python? ⇐ Python

Программы на Python
Anonymous
Как я могу протестировать список вызовов методов в Python?

Сообщение Anonymous »

Используя этот код, я могу распечатать список методов, вызванных в моем тестовом методе:

Код: Выделить всё

import unittest
from unittest.mock import patch, Mock, call

class MyTest(unittest.TestCase):
@patch(mymodule.DepObj)
def mytest(self, mock_obj):
mock_obj_ret = mock_obj.return_value # Object from constructor

# Call test method

callList = mock_obj_ret.method_calls
self.assertEqual(5, len(callList))
print(callList)
Вывод callList выглядит примерно так:

Код: Выделить всё

[call.mymethod0(), call.mymethod1(MYARG1, key=val), call.mymethod2(myarg1, myarg2), call.mymethod3(myarg3), ...]
Мне нужно проверить вызовы в списке вызовов на предмет имен вызываемых методов (в правильном порядке) и используемых аргументов. Как я могу получить доступ к именам методов и переданным параметрам? Не могу найти в документации.
Может быть что-то вроде этого:

Код: Выделить всё

self.assertEqual("mymethod2", callList[1].name) # Doesn't work
Я должен отметить, что некоторые методы, которые я хочу протестировать, не являются макетами. Для print(vars(callList[1])) это дает:

Код: Выделить всё

{'_mock_name': None, '_mock_parent': None, '_mock_from_kall': True}
Это также бесполезно.
Я могу получить аргументы и kwargs из одного вызова следующим образом:

Код: Выделить всё

print(mock_obj_ret.method_calls[1].args)
print(mock_obj_ret.method_calls[1].kwargs)
Но мне все еще нужно знать, как получить имя вызываемого метода (в виде строки).

Подробнее здесь: https://stackoverflow.com/questions/773 ... -in-python

Вернуться в «Python»