Есть ли встроенный макет объекта для передачи в модульный тест Python?

#python #mocking #pytest #python-unittest.mock #pytest-mock

#python #издевательство #pytest #python-unittest.mock #pytest-макет

Вопрос:

Я обычно создаю экземпляр Mock объекта во время модульных тестов. Меня тошнит от:

  1. Необходимость вводить from unittest.mock import Mock
  2. А затем создайте экземпляр 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. Да, я тоже думал об этом. Я надеялся на что-то, что вообще не требовало пользовательской фиксации с моей стороны. Я надеялся, что он будет просто встроен.