From aa6f91da58f69e45650e17c67fe3250782d050b8 Mon Sep 17 00:00:00 2001 From: Ivan Popovich Date: Tue, 17 Mar 2026 07:02:46 +0300 Subject: [PATCH 1/5] Sprint_4 --- tests.py | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 177 insertions(+), 14 deletions(-) diff --git a/tests.py b/tests.py index 383385e..5f89e47 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,187 @@ from main import BooksCollector -# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector -# обязательно указывать префикс Test + class TestBooksCollector: - # пример теста: - # обязательно указывать префикс test_ - # дальше идет название метода, который тестируем add_new_book_ - # затем, что тестируем add_two_books - добавление двух книг def test_add_new_book_add_two_books(self): - # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() - - # добавляем две книги collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') + assert len(collector.get_books_genre()) == 2 + + def test_add_new_book_with_long_name_not_added(self): + collector = BooksCollector() + long_name = 'А' * 41 + collector.add_new_book(long_name) + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_with_empty_name_not_added(self): + collector = BooksCollector() + collector.add_new_book('') + assert len(collector.get_books_genre()) == 0 + + def test_add_new_book_duplicate_not_added(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_new_book('Книга') + assert len(collector.get_books_genre()) == 1 + + def test_set_book_genre(self): + collector = BooksCollector() + book_name = 'Книга' + collector.add_new_book(book_name) + collector.set_book_genre(book_name, 'Ужасы') + assert collector.get_book_genre(book_name) == 'Ужасы' + + def test_set_book_genre_for_nonexistent_book(self): + collector = BooksCollector() + collector.set_book_genre('Несуществующая книга', 'Фантастика') + assert collector.get_book_genre('Несуществующая книга') is None + + def test_set_book_genre_with_invalid_genre(self): + collector = BooksCollector() + book_name = 'Книга' + collector.add_new_book(book_name) + collector.set_book_genre(book_name, 'Неверный жанр') + assert collector.get_book_genre(book_name) == '' + + def test_get_book_genre_for_nonexistent_book(self): + collector = BooksCollector() + assert collector.get_book_genre('Несуществующая книга') is None + + def test_get_books_with_specific_genre(self): + collector = BooksCollector() + collector.add_new_book('Книга 1') + collector.add_new_book('Книга 2') + collector.add_new_book('Книга 3') + collector.set_book_genre('Книга 1', 'Ужасы') + collector.set_book_genre('Книга 2', 'Ужасы') + collector.set_book_genre('Книга 3', 'Комедии') + + horror_books = collector.get_books_with_specific_genre('Ужасы') + assert len(horror_books) == 2 + assert 'Книга 1' in horror_books + assert 'Книга 2' in horror_books + assert 'Книга 3' not in horror_books + + def test_get_books_with_specific_genre_no_books(self): + collector = BooksCollector() + assert collector.get_books_with_specific_genre('Ужасы') == [] + + def test_get_books_with_invalid_genre(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.set_book_genre('Книга', 'Ужасы') + assert collector.get_books_with_specific_genre('Неверный жанр') == [] + + def test_get_books_genre_returns_dict(self): + collector = BooksCollector() + collector.add_new_book('Книга 1') + collector.add_new_book('Книга 2') + books = collector.get_books_genre() + assert isinstance(books, dict) + assert len(books) == 2 + + def test_get_books_for_children(self): + collector = BooksCollector() + collector.add_new_book('Детская книга') + collector.add_new_book('Ужастик') + collector.add_new_book('Детектив') + collector.set_book_genre('Детская книга', 'Мультфильмы') + collector.set_book_genre('Ужастик', 'Ужасы') + collector.set_book_genre('Детектив', 'Детективы') + + children_books = collector.get_books_for_children() + assert len(children_books) == 1 + assert 'Детская книга' in children_books + assert 'Ужастик' not in children_books + assert 'Детектив' not in children_books + + def test_get_books_for_children_without_genre(self): + collector = BooksCollector() + collector.add_new_book('Книга без жанра') + children_books = collector.get_books_for_children() + assert 'Книга без жанра' not in children_books + + def test_add_book_in_favorites(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_book_in_favorites('Книга') + assert 'Книга' in collector.get_list_of_favorites_books() + + def test_add_nonexistent_book_to_favorites(self): + collector = BooksCollector() + collector.add_book_in_favorites('Несуществующая книга') + assert len(collector.get_list_of_favorites_books()) == 0 + + def test_add_duplicate_book_to_favorites(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_book_in_favorites('Книга') + collector.add_book_in_favorites('Книга') + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_delete_book_from_favorites(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_book_in_favorites('Книга') + collector.delete_book_from_favorites('Книга') + assert 'Книга' not in collector.get_list_of_favorites_books() + + def test_delete_nonexistent_book_from_favorites(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_book_in_favorites('Книга') + collector.delete_book_from_favorites('Несуществующая книга') + assert len(collector.get_list_of_favorites_books()) == 1 + + def test_get_list_of_favorites_books_empty(self): + collector = BooksCollector() + assert collector.get_list_of_favorites_books() == [] + + def test_get_list_of_favorites_books_returns_list(self): + collector = BooksCollector() + collector.add_new_book('Книга 1') + collector.add_new_book('Книга 2') + collector.add_book_in_favorites('Книга 1') + collector.add_book_in_favorites('Книга 2') + favorites = collector.get_list_of_favorites_books() + assert isinstance(favorites, list) + assert len(favorites) == 2 +def test_add_new_book_with_max_length_name(self): + collector = BooksCollector() + name = 'А' * 40 + collector.add_new_book(name) + assert len(collector.get_books_genre()) == 1 + +def test_book_names_are_case_sensitive(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.add_new_book('книга') + assert len(collector.get_books_genre()) == 2 + +def test_set_genre_for_book_without_genre(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.set_book_genre('Книга', 'Фантастика') + assert collector.get_book_genre('Книга') == 'Фантастика' + +def test_get_books_for_children_empty(self): + collector = BooksCollector() + assert collector.get_books_for_children() == [] + +def test_genre_age_rating_initialized_correctly(self): + collector = BooksCollector() + assert collector.genre_age_rating == ['Ужасы', 'Детективы'] - # проверяем, что добавилось именно две - # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 +def test_get_books_with_specific_genre_empty_books(self): + collector = BooksCollector() + result = collector.get_books_with_specific_genre('Фантастика') + assert result == [] - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file +def test_delete_book_from_favorites_not_in_favorites(self): + collector = BooksCollector() + collector.add_new_book('Книга') + collector.delete_book_from_favorites('Книга') # книга не в избранном + assert len(collector.get_list_of_favorites_books()) == 0 + \ No newline at end of file From e99694129782e026bf575e858b8a3a620fdb38a6 Mon Sep 17 00:00:00 2001 From: Ivan Popovich Date: Tue, 17 Mar 2026 07:08:47 +0300 Subject: [PATCH 2/5] Sprint_4 --- README.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc701d..45c12bf 100644 --- a/README.md +++ b/README.md @@ -1 +1,81 @@ -# qa_python \ No newline at end of file +# qa_python_4 +# Тестирование класса BooksCollector + +## Общая информация +- **Всего реализовано тестов:** 21 +- **Покрытие методов:** 100% (все 10 методов класса протестированы) +- **Библиотека для тестирования:** pytest + +--- + +## Структура тестов + +### Группа 1: Тестирование добавления книг (4 теста) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 1 | `test_add_new_book_add_two_books` | Добавление нескольких книг | В словаре 2 книги | +| 2 | `test_add_new_book_with_long_name_not_added` | Название длиннее 40 символов | Книга не добавляется | +| 3 | `test_add_new_book_with_empty_name_not_added` | Пустое название | Книга не добавляется | +| 4 | `test_add_new_book_duplicate_not_added` | Добавление дубликата | Дубликат игнорируется | + +### Группа 2: Тестирование установки и получения жанра (4 теста) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 5 | `test_set_book_genre` | Установка валидного жанра | Жанр успешно устанавливается | +| 6 | `test_set_book_genre_for_nonexistent_book` | Установка жанра несуществующей книге | Жанр не устанавливается | +| 7 | `test_set_book_genre_with_invalid_genre` | Установка невалидного жанра | Жанр не меняется (остаётся '') | +| 8 | `test_get_book_genre_for_nonexistent_book` | Получение жанра несуществующей книги | Возвращается None | + +### Группа 3: Тестирование получения книг по жанрам (4 теста) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 9 | `test_get_books_with_specific_genre` | Получение книг конкретного жанра | Возвращаются только книги нужного жанра | +| 10 | `test_get_books_with_specific_genre_no_books` | Получение книг жанра, которого нет | Возвращается пустой список | +| 11 | `test_get_books_with_invalid_genre` | Получение книг с несуществующим жанром | Возвращается пустой список | +| 12 | `test_get_books_genre_returns_dict` | Получение всего словаря книг | Возвращается словарь правильного размера | + +### Группа 4: Тестирование возрастного рейтинга (2 теста) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 13 | `test_get_books_for_children` | Книги с возрастным рейтингом не попадают в список для детей | В списке только книги без возрастных ограничений | +| 14 | `test_get_books_for_children_without_genre` | Книги без жанра не попадают в список для детей | Книга без жанра отсутствует в списке | + +### Группа 5: Тестирование избранного (7 тестов) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 15 | `test_add_book_in_favorites` | Добавление книги в избранное | Книга появляется в избранном | +| 16 | `test_add_nonexistent_book_to_favorites` | Добавление несуществующей книги в избранное | Книга не добавляется | +| 17 | `test_add_duplicate_book_to_favorites` | Добавление дубликата в избранное | Дубликат игнорируется | +| 18 | `test_delete_book_from_favorites` | Удаление книги из избранного | Книга удаляется | +| 19 | `test_delete_nonexistent_book_from_favorites` | Удаление несуществующей книги из избранного | Ничего не происходит | +| 20 | `test_get_list_of_favorites_books_empty` | Получение пустого списка избранного | Возвращается пустой список | +| 21 | `test_get_list_of_favorites_books_returns_list` | Получение списка избранного с книгами | Возвращается список правильного размера | + +--- + +## Проверка требований (Checklist) + +| Требование | Статус | Тесты | +|------------|--------|-------| +| ✅ Добавление книг с валидными названиями | Покрыто | Тест №1 | +| ✅ Проверка длины названия (не больше 40 символов) | Покрыто | Тест №2 | +| ✅ Проверка на пустое название | Покрыто | Тест №3 | +| ✅ Защита от дубликатов | Покрыто | Тест №4 | +| ✅ Установка валидного жанра | Покрыто | Тест №5 | +| ✅ Защита от невалидных жанров | Покрыто | Тест №7 | +| ✅ Получение книг по жанру | Покрыто | Тесты №9-11 | +| ✅ Фильтрация книг для детей | Покрыто | Тесты №13-14 | +| ✅ Работа с избранным (добавление/удаление) | Покрыто | Тесты №15-21 | + +--- + +## Запуск тестов + +### Предварительные требования +```bash +pip install pytest \ No newline at end of file From f0678e31838713f6b88660f4eaaca98960c6f566 Mon Sep 17 00:00:00 2001 From: Ivan Popovich Date: Wed, 18 Mar 2026 06:51:37 +0300 Subject: [PATCH 3/5] Sprint_4 --- README.md | 134 ++++++---- .../conftest.cpython-313-pytest-8.3.4.pyc | Bin 0 -> 130 bytes conftest.py | 32 +++ tests.py | 245 ++++++++---------- 4 files changed, 236 insertions(+), 175 deletions(-) create mode 100644 __pycache__/conftest.cpython-313-pytest-8.3.4.pyc create mode 100644 conftest.py diff --git a/README.md b/README.md index 45c12bf..4bade45 100644 --- a/README.md +++ b/README.md @@ -2,80 +2,126 @@ # Тестирование класса BooksCollector ## Общая информация -- **Всего реализовано тестов:** 21 +- **Всего реализовано тестов:** 38 +- **Параметризированные тесты:** 2 (проверка граничных значений длины названия) - **Покрытие методов:** 100% (все 10 методов класса протестированы) +- **Использование фикстур:** 4 фикстуры в conftest.py - **Библиотека для тестирования:** pytest + +## Структура проекта + + --- -## Структура тестов +## Фикстуры (conftest.py) -### Группа 1: Тестирование добавления книг (4 теста) +| Фикстура | Описание | +|----------|----------| +| `collector` | Пустой экземпляр BooksCollector для каждого теста | +| `collector_with_books` | Экземпляр с 3 книгами без жанров | +| `collector_with_genres` | Экземпляр с книгами и установленными жанрами | +| `collector_with_favorites` | Экземпляр с книгами, жанрами и избранным | -| № | Название теста | Что проверяет | Ожидаемый результат | -|---|----------------|----------------|---------------------| -| 1 | `test_add_new_book_add_two_books` | Добавление нескольких книг | В словаре 2 книги | -| 2 | `test_add_new_book_with_long_name_not_added` | Название длиннее 40 символов | Книга не добавляется | -| 3 | `test_add_new_book_with_empty_name_not_added` | Пустое название | Книга не добавляется | -| 4 | `test_add_new_book_duplicate_not_added` | Добавление дубликата | Дубликат игнорируется | +--- + +## Группы тестов + +### Группа 1: Тестирование добавления книг (4 теста, включая 2 параметризированных) -### Группа 2: Тестирование установки и получения жанра (4 теста) +| № | Название теста | Тип | Что проверяет | Ожидаемый результат | +|---|----------------|-----|----------------|---------------------| +| 1 | `test_add_new_book_add_two_books` | Обычный | Добавление нескольких книг | В словаре 2 книги | +| 2 | `test_add_new_book_with_invalid_length_not_added` | **Параметризированный** | Невалидные значения длины (пустая строка, >40 символов) | Книга не добавляется | +| 3 | `test_add_new_book_with_valid_length_added` | **Параметризированный** | Граничные значения валидной длины (1, 20, 40 символов) | Книга успешно добавляется | +| 4 | `test_add_new_book_duplicate_not_added` | Обычный | Добавление дубликата | Дубликат игнорируется | + +### Группа 2: Тестирование установки жанра (3 теста) | № | Название теста | Что проверяет | Ожидаемый результат | |---|----------------|----------------|---------------------| | 5 | `test_set_book_genre` | Установка валидного жанра | Жанр успешно устанавливается | | 6 | `test_set_book_genre_for_nonexistent_book` | Установка жанра несуществующей книге | Жанр не устанавливается | | 7 | `test_set_book_genre_with_invalid_genre` | Установка невалидного жанра | Жанр не меняется (остаётся '') | + +### Группа 3: Тестирование получения жанра (3 теста) + +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| | 8 | `test_get_book_genre_for_nonexistent_book` | Получение жанра несуществующей книги | Возвращается None | +| 9 | `test_get_book_genre_for_existing_book` | Получение жанра существующей книги | Возвращается установленный жанр | +| 10 | `test_get_book_genre_for_book_without_genre` | Получение жанра книги без жанра | Возвращается '' | -### Группа 3: Тестирование получения книг по жанрам (4 теста) +### Группа 4: Тестирование получения книг по жанрам (4 теста) | № | Название теста | Что проверяет | Ожидаемый результат | |---|----------------|----------------|---------------------| -| 9 | `test_get_books_with_specific_genre` | Получение книг конкретного жанра | Возвращаются только книги нужного жанра | -| 10 | `test_get_books_with_specific_genre_no_books` | Получение книг жанра, которого нет | Возвращается пустой список | -| 11 | `test_get_books_with_invalid_genre` | Получение книг с несуществующим жанром | Возвращается пустой список | -| 12 | `test_get_books_genre_returns_dict` | Получение всего словаря книг | Возвращается словарь правильного размера | +| 11 | `test_get_books_with_specific_genre` | Получение книг конкретного жанра | Возвращаются только книги нужного жанра | +| 12 | `test_get_books_with_specific_genre_no_books` | Получение книг жанра, которого нет | Возвращается пустой список | +| 13 | `test_get_books_with_specific_genre_empty_collection` | Получение книг из пустой коллекции | Возвращается пустой список | +| 14 | `test_get_books_with_invalid_genre` | Получение книг с несуществующим жанром | Возвращается пустой список | -### Группа 4: Тестирование возрастного рейтинга (2 теста) +### Группа 5: Тестирование метода get_books_genre (4 теста) | № | Название теста | Что проверяет | Ожидаемый результат | |---|----------------|----------------|---------------------| -| 13 | `test_get_books_for_children` | Книги с возрастным рейтингом не попадают в список для детей | В списке только книги без возрастных ограничений | -| 14 | `test_get_books_for_children_without_genre` | Книги без жанра не попадают в список для детей | Книга без жанра отсутствует в списке | +| 15 | `test_get_books_genre_returns_dict` | Проверка типа возвращаемых данных | Возвращается словарь | +| 16 | `test_get_books_genre_empty_dict` | Получение пустого словаря | Возвращается {} | +| 17 | `test_get_books_genre_with_one_book` | Получение словаря с одной книгой | Словарь содержит 1 книгу без жанра | +| 18 | `test_get_books_genre_with_multiple_books` | Получение словаря с несколькими книгами | Словарь содержит все книги с их жанрами | -### Группа 5: Тестирование избранного (7 тестов) +### Группа 6: Тестирование книг для детей (3 теста) | № | Название теста | Что проверяет | Ожидаемый результат | |---|----------------|----------------|---------------------| -| 15 | `test_add_book_in_favorites` | Добавление книги в избранное | Книга появляется в избранном | -| 16 | `test_add_nonexistent_book_to_favorites` | Добавление несуществующей книги в избранное | Книга не добавляется | -| 17 | `test_add_duplicate_book_to_favorites` | Добавление дубликата в избранное | Дубликат игнорируется | -| 18 | `test_delete_book_from_favorites` | Удаление книги из избранного | Книга удаляется | -| 19 | `test_delete_nonexistent_book_from_favorites` | Удаление несуществующей книги из избранного | Ничего не происходит | -| 20 | `test_get_list_of_favorites_books_empty` | Получение пустого списка избранного | Возвращается пустой список | -| 21 | `test_get_list_of_favorites_books_returns_list` | Получение списка избранного с книгами | Возвращается список правильного размера | +| 19 | `test_get_books_for_children` | Книги с возрастным рейтингом не попадают в список для детей | В списке только книги без возрастных ограничений | +| 20 | `test_get_books_for_children_without_genre` | Книги без жанра не попадают в список для детей | Книга без жанра отсутствует в списке | +| 21 | `test_get_books_for_children_empty` | Получение списка из пустой коллекции | Возвращается пустой список | ---- +### Группа 7: Тестирование избранного (9 тестов) -## Проверка требований (Checklist) +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 22 | `test_add_book_in_favorites` | Добавление книги в избранное | Книга появляется в избранном | +| 23 | `test_add_nonexistent_book_to_favorites` | Добавление несуществующей книги в избранное | Книга не добавляется | +| 24 | `test_add_duplicate_book_to_favorites` | Добавление дубликата в избранное | Дубликат игнорируется | +| 25 | `test_delete_book_from_favorites` | Удаление книги из избранного | Книга удаляется | +| 26 | `test_delete_nonexistent_book_from_favorites` | Удаление несуществующей книги из избранного | Ничего не происходит | +| 27 | `test_delete_book_from_favorites_not_in_favorites` | Удаление книги, которой нет в избранном | Ничего не происходит | +| 28 | `test_get_list_of_favorites_books_empty` | Получение пустого списка избранного | Возвращается пустой список | +| 29 | `test_get_list_of_favorites_books_returns_list` | Проверка типа возвращаемых данных | Возвращается список | +| 30 | `test_get_list_of_favorites_books_with_one_book` | Получение списка с одной книгой | Список содержит 1 книгу | +| 31 | `test_get_list_of_favorites_books_with_multiple_books` | Получение списка с несколькими книгами | Список содержит все добавленные книги | + +### Группа 8: Тестирование инициализации (2 теста) -| Требование | Статус | Тесты | -|------------|--------|-------| -| ✅ Добавление книг с валидными названиями | Покрыто | Тест №1 | -| ✅ Проверка длины названия (не больше 40 символов) | Покрыто | Тест №2 | -| ✅ Проверка на пустое название | Покрыто | Тест №3 | -| ✅ Защита от дубликатов | Покрыто | Тест №4 | -| ✅ Установка валидного жанра | Покрыто | Тест №5 | -| ✅ Защита от невалидных жанров | Покрыто | Тест №7 | -| ✅ Получение книг по жанру | Покрыто | Тесты №9-11 | -| ✅ Фильтрация книг для детей | Покрыто | Тесты №13-14 | -| ✅ Работа с избранным (добавление/удаление) | Покрыто | Тесты №15-21 | +| № | Название теста | Что проверяет | Ожидаемый результат | +|---|----------------|----------------|---------------------| +| 32 | `test_genre_age_rating_initialized_correctly` | Проверка списка возрастных ограничений | `['Ужасы', 'Детективы']` | +| 33 | `test_genre_list_initialized_correctly` | Проверка списка доступных жанров | `['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']` | --- -## Запуск тестов - -### Предварительные требования -```bash -pip install pytest \ No newline at end of file +### Тест 1: Невалидные значения длины названия +```python +@pytest.mark.parametrize('invalid_name', [ + '', # пустая строка + 'А' * 41, # больше 40 символов + 'А' * 100, # значительно больше 40 +]) +def test_add_new_book_with_invalid_length_not_added(self, collector, invalid_name): + collector.add_new_book(invalid_name) + assert len(collector.get_books_genre()) == 0 +### Тест 2: Валидные значения длины названия (граничные значения) +```python +@pytest.mark.parametrize('valid_name', [ + 'А', # минимальная длина (1 символ) + 'А' * 20, # средняя длина + 'А' * 40, # максимальная длина + 'Книга с пробелами и знаками препинания!', # обычное название +]) +def test_add_new_book_with_valid_length_added(self, collector, valid_name): + collector.add_new_book(valid_name) + assert len(collector.get_books_genre()) == 1 + assert valid_name in collector.get_books_genre() + \ No newline at end of file diff --git a/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc b/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9e522438ed67ff6c71e4b760fe105ce7e36ab59 GIT binary patch literal 130 zcmey&%ge<81WGcyGC}lX5CH>>P{wB#AY&>+I)f&o-%5reCLr%KNa~hiid9TNQGQlx za!GMaVPbqiWl2VUUQBX+URp_Nafx0* Date: Thu, 19 Mar 2026 07:00:03 +0300 Subject: [PATCH 4/5] Sprint_4 --- README.md | 27 ++---------------- .../conftest.cpython-313-pytest-8.3.4.pyc | Bin 130 -> 1936 bytes tests.py | 8 ------ 3 files changed, 2 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 4bade45..9210116 100644 --- a/README.md +++ b/README.md @@ -93,35 +93,12 @@ | 30 | `test_get_list_of_favorites_books_with_one_book` | Получение списка с одной книгой | Список содержит 1 книгу | | 31 | `test_get_list_of_favorites_books_with_multiple_books` | Получение списка с несколькими книгами | Список содержит все добавленные книги | -### Группа 8: Тестирование инициализации (2 теста) -| № | Название теста | Что проверяет | Ожидаемый результат | -|---|----------------|----------------|---------------------| -| 32 | `test_genre_age_rating_initialized_correctly` | Проверка списка возрастных ограничений | `['Ужасы', 'Детективы']` | -| 33 | `test_genre_list_initialized_correctly` | Проверка списка доступных жанров | `['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии']` | --- ### Тест 1: Невалидные значения длины названия -```python -@pytest.mark.parametrize('invalid_name', [ - '', # пустая строка - 'А' * 41, # больше 40 символов - 'А' * 100, # значительно больше 40 -]) -def test_add_new_book_with_invalid_length_not_added(self, collector, invalid_name): - collector.add_new_book(invalid_name) - assert len(collector.get_books_genre()) == 0 +test_add_new_book_with_invalid_length_not_added ### Тест 2: Валидные значения длины названия (граничные значения) -```python -@pytest.mark.parametrize('valid_name', [ - 'А', # минимальная длина (1 символ) - 'А' * 20, # средняя длина - 'А' * 40, # максимальная длина - 'Книга с пробелами и знаками препинания!', # обычное название -]) -def test_add_new_book_with_valid_length_added(self, collector, valid_name): - collector.add_new_book(valid_name) - assert len(collector.get_books_genre()) == 1 - assert valid_name in collector.get_books_genre() +test_add_new_book_with_valid_length_added \ No newline at end of file diff --git a/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc b/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc index c9e522438ed67ff6c71e4b760fe105ce7e36ab59..154e169f48e2316c12002cabd33855d62b997ba4 100644 GIT binary patch literal 1936 zcmah}&u<$=6n^`|>rHHj1d;-26iw9vGSDI@xm18?3ZkSUf?7Udv2vYFYe;v)>~7QC zoD>OA1-%fd;)DbTdJAcjrfHo@`~|ZjqR}EmB`$DtFkCqC-uP!s+^)1U^WJ>3``-7x zH`P?C7x4L)Z502|0e&Z=@u>Ah^+#MRK?X9)Dd38n)d|g08BFLr#%enTH*iNi6`wG< z$slK(ezftS)|}CXVXSWQ-Yyuu4U_1CiM3&pT`)!)CUsUx$N!{1PhL}^zH!(6$UEWA z%-99r<%L#&0FW&v6qdyD^GvLWO>tAK zkQIK8@0W7C!bBN2R>I5T77M=+8;DsIcf?(BJG>H>*zRbUxIun~uw}7^#-_L~Hd(kR zR_R}2nNxVzph|&72d0kY-sSFxn24AAIB(6)`{!IIS8$za-}d|?v-43;p^+%>!6PU$ zcqtr8@V5cU;hz%wg}$H1(Nkz9TgOQv#?e@U7f}B96i3M_kHN`707uQj>2^G#=*g;M zbuWW=ki!Hp$O4k425;eZCuuBPVB#(kwkmEQjWWR+TjDnQ%A$;{-4W|VM;ZCPj-;TO z*8WM-*S>Bz*^8ZympUCs(@K=gPfb~lJ!hT43P@{`kSIom7wK}Mlo?~(#5o#lQfJK- z{d4k^#|LnWnDm~(p#*;!kb1TB<}dw2pXuA?z&&#`G)J%cKbwbkG#J=-KQSou!3Xer z0l%_@91*vBF`7{_>R7!Qk;}a?T1I~;CYCYUF{nvAco~1brzX4TW+cEGQeURhCINT? z4+dBVbejBFm{L7#2`o_(C!niEd`stW=Q5|73+Pf1UtuX@Ib-uIqNLats7#+{`;uSl ztnF|+txB4uKprLEkYuPs5{dRWMMAoG$8jh@#ejjQN^fuLseAfJsE=IzKpZ}?rN7bU z_&&F#A8WJ4;p1ES_;weys4QeROyc6fYPIUWi&kwNl2uRzEjWoEeYgsE!R*pNsHGzk7x7v^a*411llw#mxy=*&al{Yf>ph1^MEI`IohI9r^M!%H|MNA9~lXo*}DRS84 c=BJeAq}mm+0_8!9i$RQ!%#4hTMa)1J0Q*%BJOBUy diff --git a/tests.py b/tests.py index 8a6bee3..a8c6b06 100644 --- a/tests.py +++ b/tests.py @@ -160,11 +160,3 @@ def test_get_list_of_favorites_books_with_multiple_books(self, collector_with_fa assert len(favorites) == 2 assert 'Книга 1' in favorites assert 'Книга 2' in favorites - - # Тесты инициализации - def test_genre_age_rating_initialized_correctly(self, collector): - assert collector.genre_age_rating == ['Ужасы', 'Детективы'] - - def test_genre_list_initialized_correctly(self, collector): - assert collector.genre == ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'] - \ No newline at end of file From ea34ef842e6f1e25eb062ad5e4a6fc893a0d8497 Mon Sep 17 00:00:00 2001 From: Ivan Popovich Date: Thu, 19 Mar 2026 07:03:22 +0300 Subject: [PATCH 5/5] Sprint_4 --- .../conftest.cpython-313-pytest-8.3.4.pyc | Bin 1936 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __pycache__/conftest.cpython-313-pytest-8.3.4.pyc diff --git a/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc b/__pycache__/conftest.cpython-313-pytest-8.3.4.pyc deleted file mode 100644 index 154e169f48e2316c12002cabd33855d62b997ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1936 zcmah}&u<$=6n^`|>rHHj1d;-26iw9vGSDI@xm18?3ZkSUf?7Udv2vYFYe;v)>~7QC zoD>OA1-%fd;)DbTdJAcjrfHo@`~|ZjqR}EmB`$DtFkCqC-uP!s+^)1U^WJ>3``-7x zH`P?C7x4L)Z502|0e&Z=@u>Ah^+#MRK?X9)Dd38n)d|g08BFLr#%enTH*iNi6`wG< z$slK(ezftS)|}CXVXSWQ-Yyuu4U_1CiM3&pT`)!)CUsUx$N!{1PhL}^zH!(6$UEWA z%-99r<%L#&0FW&v6qdyD^GvLWO>tAK zkQIK8@0W7C!bBN2R>I5T77M=+8;DsIcf?(BJG>H>*zRbUxIun~uw}7^#-_L~Hd(kR zR_R}2nNxVzph|&72d0kY-sSFxn24AAIB(6)`{!IIS8$za-}d|?v-43;p^+%>!6PU$ zcqtr8@V5cU;hz%wg}$H1(Nkz9TgOQv#?e@U7f}B96i3M_kHN`707uQj>2^G#=*g;M zbuWW=ki!Hp$O4k425;eZCuuBPVB#(kwkmEQjWWR+TjDnQ%A$;{-4W|VM;ZCPj-;TO z*8WM-*S>Bz*^8ZympUCs(@K=gPfb~lJ!hT43P@{`kSIom7wK}Mlo?~(#5o#lQfJK- z{d4k^#|LnWnDm~(p#*;!kb1TB<}dw2pXuA?z&&#`G)J%cKbwbkG#J=-KQSou!3Xer z0l%_@91*vBF`7{_>R7!Qk;}a?T1I~;CYCYUF{nvAco~1brzX4TW+cEGQeURhCINT? z4+dBVbejBFm{L7#2`o_(C!niEd`stW=Q5|73+Pf1UtuX@Ib-uIqNLats7#+{`;uSl ztnF|+txB4uKprLEkYuPs5{dRWMMAoG$8jh@#ejjQN^fuLseAfJsE=IzKpZ}?rN7bU z_&&F#A8WJ4;p1ES_;weys4QeROyc6fYPIUWi&kwNl2uRzEjWoEeYgsE!R*pNsHGzk7x7v^a*411llw#mxy=*&al{Yf>ph1