Задача курса

Фикстуры pytest и scope: напишите тесты для очереди

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Fixtures: подготовка тестового состояния и области видимости»

Условие

Напиши тесты для очереди с двумя scope

Что уже дано

Проверяющая система скрыто определяет класс Queue в том же пространстве имён до запуска твоего кода:

class Queue:
 def __init__(self):
 self.items: list[str] = []

 def push(self, item: str) -> None:
 self.items.append(item)

 def pop(self) -> str:
 return self.items.pop(0)

 def size(self) -> int:
 return len(self.items)

Класс уже доступен по имени Queue — импортировать ничего не нужно.

Что нужно сделать

Напиши в редакторе полноценный pytest-файл с двумя фикстурами и тремя тест-функциями.

Фикстуры:

  1. fresh_queue — фикстура со scope="function". Создаёт новый Queue() и возвращает его. Каждая тест-функция, запросившая эту фикстуру, должна получать отдельный объект.

  2. shared_queue — фикстура со scope="module". Создаёт Queue(), добавляет в него один элемент "seed" через push, и возвращает объект. Все тест-функции, запросившие эту фикстуру, получают один и тот же объект.

Тест-функции:

  1. test_fresh_queue_is_empty(fresh_queue) — проверяет, что свежая очередь имеет size() == 0.

  2. test_fresh_queue_isolation(fresh_queue) — добавляет элемент "x" через push, затем проверяет size() == 1. Мутация не должна влиять на другие тесты, использующие fresh_queue.

  3. test_shared_queue_has_seed(shared_queue) — проверяет, что shared_queue содержит хотя бы один элемент и первый из них равен "seed" (используй items[0]).

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система после твоего кода:

  • находит в глобальном пространстве имён функции fresh_queue, shared_queue, test_fresh_queue_is_empty, test_fresh_queue_isolation, test_shared_queue_has_seed;
  • запускает твои тест-функции через pytest-подобный механизм, передавая результаты фикстур;
  • проверяет поведение при мутации: убеждается, что test_fresh_queue_is_empty не падает после того, как test_fresh_queue_isolation уже добавил элемент в свою копию.

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется
Фикстуры pytest и scope: напишите тесты для очереди