#python #mocking #pytest #python-unittest.mock #pytest-mock
#python #издевательство #pytest #python-unittest.mock #pytest-макет
Вопрос:
Я обычно создаю экземпляр Mock
объекта во время модульных тестов. Меня тошнит от:
- Необходимость вводить
from unittest.mock import Mock
- А затем создайте экземпляр
Mock
объекта черезmock = Mock()
Мне интересно, есть ли у pytest
, unittest.mock
pytest-mock
, и т.д. встроенный способ передачи объекта? Mock
Вот как выглядит мой текущий рабочий процесс:
from unittest.mock import Mock
def test_something() -> None:
mock = Mock()
mock.func()
mock.func.assert_called_once()
Исследования
Я знаю pytest-mock
, что я могу, по крайней мере, обойти импорт через mocker
fixture.
def test_something(mocker) -> None:
mock = mocker.Mock()
mock.func()
mock.func.assert_called_once()
Я надеюсь, что смогу просто сделать что-то подобное:
def test_something(mock) -> None:
mock.func()
mock.func.assert_called_once()
Ответ №1:
Если вы используете pytest
, просто создайте приспособление.
@pytest.fixture(scope="function")
def my_cool_mock():
mocked = Mock()
yield mocked
def test_something(my_cool_mock) -> None:
my_cool_mock.func()
my_cool_mock.func.assert_called_once()
В противном случае просто используйте pytest-mock
.
Комментарии:
1. Да, я тоже думал об этом. Я надеялся на что-то, что вообще не требовало пользовательской фиксации с моей стороны. Я надеялся, что он будет просто встроен.