Я, должно быть, устал, потому что, конечно, есть простой способ сделать это. Но я прочитал документы pytest и не могу понять этот простой вариант использования.pytest: как мне получить экземпляры (mock), возвращенные из класса?
У меня есть небольшой пакет, я хочу, чтобы тест:
class MyClass:
def __init__(self):
pass
def my_method(self, arg):
pass
def the_main_method():
m = MyClass()
m.my_method(123)
Я хотел бы, чтобы убедиться, что (1) экземпляр MyClass
создается, и что (2) my_method
называется, с соответствующими аргументами ,
Так вот мой тест:
from unittest.mock import patch
@patch('mypkg.MyClass', autospec=True)
def test_all(mocked_class):
# Call the real production code, with the class mocked.
import mypkg
mypkg.the_main_method()
# Ensure an instance of MyClass was created.
mocked_class.assert_called_once_with()
# But how do I ensure that "my_method" was called?
# I want something like mocked_class.get_returned_values() ...
Я понимаю, что каждый раз, когда производственный код вызывает MyClass()
unittest
рамки подстегивает новый Передразнивало экземпляр.
Но как я могу воспользоваться этими примерами?
Я хочу написать что-то вроде:
the_instance.assert_called_once_with(123)
Но где я получаю the_instance
от?
" Ну, к моему удивлению, нет никаких штучных экземпляров, созданных «Да, есть. Почему, по-вашему, нет?». Значение return_value не представляет собой одного возвращаемого значения, хотя - оно накапливает информацию для всех созданных экземпляров ». потому что по умолчанию макет только когда-либо создает одно возвращаемое значение и повторно использует его каждый раз, когда он вызывается. Возвращаемое значение возвращается. – user2357112
Не следует ли тестировать 'mocked_class.return_value.my_method.assert_called_once_with (123)'? – user2357112
@ user2357112: Что касается вашего первого комм как вы говорите, по умолчанию создается только один экземпляр 'return_value', а не один для каждого вызова конструктора. Вот что я пытался получить с моим ответом. Я сделаю это более ясным. Прямо во второй точке я пропустил кусок метода. – jwd