Разница между create_autospec и MagicMock (спецификация) ⇐ Python
Разница между create_autospec и MagicMock (спецификация)
Я пытаюсь понять разницу в подходах к насмешкам. Например, у меня есть класс, который я не могу инициализировать, поскольку он зависит от другого сервиса.
класс SomeClass: def __init__(self, some_service): self.some_service = some_service асинхронная защита some_method(self, x, y): вернуть х + у И у меня есть функция, использующая этот класс
async def some_function(some_class: SomeClass, a, b): вернуть a * b + ждать some_class.some_method(a, b) Я хочу протестировать функцию some_function.
@pytest.mark.asyncio асинхронная защита test_some_function_with_create_autospec(): autospec_mock = create_autospec(SomeClass) autospec_mock.some_method = AsyncMock(return_value=10) результат = ожидайте some_function (autospec_mock, 2, 3) утверждать результат == 16 autospec_mock.some_method.assert_awaited_once_with(2, 3) Но я могу сделать то же самое, используя MagicMock
@pytest.mark.asyncio асинхронная защита test_some_function_with_magic_mock(): autospec_mock = MagicMock (спец = SomeClass) autospec_mock.some_method = AsyncMock(return_value=10) результат = ожидайте some_function (autospec_mock, 2, 3) утверждать результат == 16 autospec_mock.some_method.assert_awaited_once_with(2, 3) В чем разница и что мне следует использовать?
Я прочитал документацию, но все равно ничего не понял
Я пытаюсь понять разницу в подходах к насмешкам. Например, у меня есть класс, который я не могу инициализировать, поскольку он зависит от другого сервиса.
класс SomeClass: def __init__(self, some_service): self.some_service = some_service асинхронная защита some_method(self, x, y): вернуть х + у И у меня есть функция, использующая этот класс
async def some_function(some_class: SomeClass, a, b): вернуть a * b + ждать some_class.some_method(a, b) Я хочу протестировать функцию some_function.
@pytest.mark.asyncio асинхронная защита test_some_function_with_create_autospec(): autospec_mock = create_autospec(SomeClass) autospec_mock.some_method = AsyncMock(return_value=10) результат = ожидайте some_function (autospec_mock, 2, 3) утверждать результат == 16 autospec_mock.some_method.assert_awaited_once_with(2, 3) Но я могу сделать то же самое, используя MagicMock
@pytest.mark.asyncio асинхронная защита test_some_function_with_magic_mock(): autospec_mock = MagicMock (спец = SomeClass) autospec_mock.some_method = AsyncMock(return_value=10) результат = ожидайте some_function (autospec_mock, 2, 3) утверждать результат == 16 autospec_mock.some_method.assert_awaited_once_with(2, 3) В чем разница и что мне следует использовать?
Я прочитал документацию, но все равно ничего не понял
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение