@Xveeder

Как замокать зависимость в pytest?

Вопрос следующий: есть 2 класса A и B. Класс A зависит от класса B. Класс B в свою очередь зависит от сложных ресурсов (коннекта к БД) и инициализировать его по-настоящему не предоставляется возможным в юниттестах.

Каким способом, можно пропатчить класс B так, чтобы фактически он был пустышкой, но успешно прокидывался в класс A?

class B:

  def __init__(self, db_connection):
    self.__db_connection = db_connection

class A:

  def __init__(self, b: B):
    self.__b = b

  def do_something() -> None: ...

@pytest.fixture(scope="module")
def mock_b() -> B:
  """Вот тут необходимо что-то сделать, чтобы можно было вернуть класс B пустышку"""
  • Вопрос задан
  • 297 просмотров
Решения вопроса 1
i229194964
@i229194964
Веб разработчик
import pytest
from unittest import mock

class B:
    def __init__(self, db_connection):
        self.__db_connection = db_connection

class A:
    def __init__(self, b: B):
        self.__b = b

    def do_something(self) -> None:
        pass

@pytest.fixture(scope="module")
def mock_b(mocker):
    mocker.patch('path.to.B')  # Здесь 'path.to.B' - это путь к классу B, который нужно замокать
    return B(mock.MagicMock())  # Возвращаем экземпляр класса B с мок-объектом для db_connection
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы