dataclasses — Data Classes
Підтверджує й актуалізує поняття уроку: @dataclass / frozen.
3. Рефакторинг: Faker, DataClass, Fixtures → Першоджерело ↗Відеобібліотека
Пошук у нотатках курсу Python мануфактура та спільних матеріалах з переходом на потрібну секунду.
Підтверджує й актуалізує поняття уроку: @dataclass / frozen.
3. Рефакторинг: Faker, DataClass, Fixtures → Першоджерело ↗Приклад створює frozen configuration і генерує пароль довжиною 10, який гарантовано порушує задану в прикладі minimum-length policy 12.
Assertions проходять, друкується student@example.test.
Stdlib-приклад показує typed object, valid range і fixed seed без додаткової dependency.
Друкується відтворюваний UserData, а assertion підтверджує базові constraints.
Тестові дані для автотестів →Проєктує лише потрібне поле id замість поширення raw dictionary у UI-тест.
Assertion завершується без помилки й повертає Project(id='p-1').
Параметр frozen=True додає захист від звичайного присвоєння полів і піднімає FrozenInstanceError; документація описує це як emulated immutability, а не абсолютну незмінність Python object.
Dictionary конфігурації незручний: IDE не підказує дозволені ключі, а помилки в рядках знаходяться лише під час виконання. Замість нього створюється `@dataclass(frozen=True)` з полями URL, email і password. `frozen=True` забороняє звичайне переприсвоєння полів після створення об’єкта. Це добре відповідає конфігурації одного тестового запуску: значення зчитали на старті й далі лише використовують.
Raw `dict` змушує пам’ятати рядкові ключі й не дає надійного autocomplete. Response перетворюється на невелику `Project` dataclass із фактично потрібними полями, насамперед `id` та attributes. Десеріалізація має відповідати реальній response schema. Не потрібно моделювати всі поля API «про запас»: для поточного vertical slice достатньо тих, які читає тест, з явною помилкою при відсутньому обов’язковому значенні.
Після зміни типу старе звернення `config["email"]` падає з `TypeError: object is not subscriptable`. Це очікуваний сигнал: dataclass використовує атрибути, тому код змінюється на `config.email`, `config.password`, `config.login_url`. Результат — автодоповнення, безпечніше перейменування через IDE й читабельніший контракт fixture. Type hints не роблять Python статично типізованим самі по собі, але дають IDE та аналізаторам достатньо інформації, щоб знаходити частину помилок раніше.
Автор перевіряє usages helper-функцій через IDE перед видаленням або перенесенням. Підкреслення та Find Usages допомагають не «спростити» один тест ціною поломки сусіднього. Підхід уроку: почати з прямого тесту, побачити повторення, винести рівно спільну частину, знову запустити тести. Поточних dataclass і fixtures достатньо; додатковий framework або Page Object на цьому кроці ще не потрібні.
Перед комітом перевіряється, що Faker має зафіксовану версію в `requirements.txt`, а всі тести проходять після переходу на dataclass і fixture. Повідомлення коміту описує обидві зміни: типізовану конфігурацію та генерацію тестових даних. Підсумковий стан: конфігурація незмінна й має явний тип, негативний сценарій використовує згенерований пароль, а логін виконується fixture лише там, де потрібен. Це зменшує дублювання без передчасного переходу до складнішої архітектури.