Sobes.tech
Back to questions
Junior — Middle
64

Чем отличаются мок-объекты и фикстуры в pytest и как их применять в тестах?

Companies where asked
TechCore

Answer from AI

sobes.tech AI

В pytest фикстуры и мок-объекты служат разным целям, хотя оба помогают в тестировании.

Фикстуры — это функции, которые подготавливают и предоставляют тестовые данные или окружение. Они могут создавать объекты, настраивать состояние, открывать соединения и т.п. Фикстуры удобно использовать для повторного использования кода подготовки в разных тестах.

Пример фикстуры:

import pytest

@pytest.fixture
def sample_data():
    return {'key': 'value'}

def test_example(sample_data):
    assert sample_data['key'] == 'value'

Мок-объекты (mock) — это объекты-заглушки, которые имитируют поведение реальных зависимостей, позволяя контролировать их поведение и проверять вызовы. Моки полезны, когда нужно изолировать тестируемый код от внешних сервисов или сложных компонентов.

Пример использования mock:

from unittest.mock import Mock

def test_api_call():
    mock_service = Mock()
    mock_service.get_data.return_value = {'id': 1}

    result = some_function_using_service(mock_service)
    assert result == expected_result
    mock_service.get_data.assert_called_once()

Итого:

  • Фикстуры создают и предоставляют тестовые данные или окружение.
  • Моки подменяют реальные объекты для контроля поведения и проверки взаимодействий.

Обычно фикстуры могут возвращать моки, объединяя оба подхода.