База Hintsage

Тестирование

pytest, fixtures, mocks и организация тестов.

Практика

Вопросы: Тестирование

В тесте нужно подменить отсутствующий атрибут конкретного объекта. Что произойдёт при использовании create=True?

from unittest.mock import patch

class Service:
    def run(self):
        return self.send()

service = Service()

def test_run():
    with patch.object(service, "send", return_value="fake", create=True):
        assert service.run() == "fake"

    assert not hasattr(service, "send")
Программирование PythonТестированиеPython-разработчик, отвечающий за unit-тестирование

Разработчик проверяет исходные аргументы мока после изменения переданного словаря. Как завершится тест и почему?

from unittest.mock import Mock

save = Mock()
data = {"status": "new"}

save(data)
data["status"] = "sent"

save.assert_called_once_with({"status": "new"})
Программирование PythonТестированиеРазработчик Python, отвечающий за автоматизированное тестирование

Вам нужно временно изменить окружение только на часть одного теста, чтобы после неё проверить исходное состояние. Какой механизм pytest monkeypatch обеспечивает ранний откат изменений?

Программирование PythonТестированиеPython-разработчик, отвечающий за автоматизированное тестирование

Практическая ситуация: фикстура должна выполниться для теста, но её результат не нужен в теле теста. Как pytest подключит её в этом примере?

import pytest

@pytest.fixture
def audit_log():
    print("setup")
    yield
    print("teardown")

@pytest.mark.usefixtures("audit_log")
def test_report():
    assert True
Программирование PythonТестированиеPython-разработчик, сопровождающий тесты на pytest

В этом тесте определите результат второго запуска параметризации и объясните причину.

import pytest

shared = {"items": []}

@pytest.mark.parametrize("case", [shared, shared])
def test_append(case):
    case["items"].append("x")
    assert len(case["items"]) == 1
Программирование PythonТестированиеPython-разработчик, пишущий и поддерживающий автоматизированные тесты

Показано 120 из 50