-
Notifications
You must be signed in to change notification settings - Fork 0
Sprint_2 #5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Sprint_2 #5
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,26 @@ | ||
| # qa_python | ||
| # qa_python | ||
| Этот набор тестов покрывает все методы класса BooksCollector: | ||
|
|
||
| test_add_new_book_valid_name_book_added - проверяет добавление книги с валидным названием | ||
|
|
||
| test_set_book_genre_valid_data_genre_set - проверяет установку жанра для книги | ||
|
|
||
| test_get_books_with_specific_genre_returns_correct_books - проверяет получение книг по конкретному жанру | ||
|
|
||
| test_get_books_for_children_returns_only_child_friendly_books - проверяет, что возвращаются только книги без возрастного рейтинга | ||
|
|
||
| test_add_book_in_favorites_book_added_to_favorites - проверяет добавление книги в избранное | ||
|
|
||
| test_delete_book_from_favorites_book_removed - проверяет удаление книги из избранного | ||
|
|
||
| test_get_list_of_favorites_books_returns_correct_list - проверяет получение списка избранных книг | ||
|
|
||
| test_add_new_book_name_length_boundaries - параметризованный тест для проверки граничных значений длины названия | ||
|
|
||
| test_add_new_book_duplicate_not_added - проверяет, что дубликаты не добавляются | ||
|
|
||
| test_set_book_genre_invalid_genre_not_set - проверяет, что несуществующий жанр не устанавливается | ||
|
|
||
| Все тесты независимы и каждый создает свой экземпляр класса. Параметризация используется для тестирования разных длин названий книг. | ||
|
|
||
| - |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,24 +1,103 @@ | ||
| from main import BooksCollector | ||
| import pytest | ||
|
|
||
|
|
||
| # класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector | ||
| # обязательно указывать префикс Test | ||
| class TestBooksCollector: | ||
|
|
||
| # пример теста: | ||
| # обязательно указывать префикс test_ | ||
| # дальше идет название метода, который тестируем add_new_book_ | ||
| # затем, что тестируем add_two_books - добавление двух книг | ||
| def test_add_new_book_add_two_books(self): | ||
| # создаем экземпляр (объект) класса BooksCollector | ||
| collector = BooksCollector() | ||
| # Фикстура для создания экземпляра коллектора перед каждым тестом | ||
| @pytest.fixture | ||
| def collector(self): | ||
| return BooksCollector() | ||
|
|
||
| # Тест 1: Добавление одной книги с валидным названием | ||
| def test_add_new_book_valid_name_book_added(self, collector): | ||
| collector.add_new_book('Гарри Поттер') | ||
| assert 'Гарри Поттер' in collector.books_genre | ||
| assert collector.books_genre['Гарри Поттер'] == '' | ||
|
|
||
| # Тест 2: Проверка граничных значений длины названия книги | ||
| @pytest.mark.parametrize('book_name, expected_count', [ | ||
| ('А' * 1, 1), # минимальная длина | ||
| ('А' * 40, 1), # максимальная длина | ||
| ('А' * 41, 0), # превышение длины | ||
| ('', 0), # пустая строка | ||
| ]) | ||
| def test_add_new_book_name_length_boundaries(self, collector, book_name, expected_count): | ||
| collector.add_new_book(book_name) | ||
| assert len(collector.books_genre) == expected_count | ||
|
|
||
| # Тест 3: Невозможность добавления дубликата книги | ||
| def test_add_new_book_duplicate_not_added(self, collector): | ||
| collector.add_new_book('Дубликат') | ||
| collector.add_new_book('Дубликат') | ||
| assert len(collector.books_genre) == 1 | ||
|
|
||
| # Тест 4: Установка валидного жанра для существующей книги | ||
| def test_set_book_genre_valid_data_genre_set(self, collector): | ||
| collector.add_new_book('Метро 2033') | ||
| collector.set_book_genre('Метро 2033', 'Фантастика') | ||
| assert collector.books_genre['Метро 2033'] == 'Фантастика' | ||
|
|
||
| # Тест 5: Невозможность установки несуществующего жанра | ||
| def test_set_book_genre_invalid_genre_not_set(self, collector): | ||
| collector.add_new_book('Книга') | ||
| collector.set_book_genre('Книга', 'Несуществующий жанр') | ||
| assert collector.books_genre['Книга'] == '' | ||
|
|
||
| # Тест 6: Получение жанра книги по имени | ||
| def test_get_book_genre_returns_correct_genre(self, collector): | ||
| collector.add_new_book('Книга') | ||
| collector.books_genre['Книга'] = 'Комедии' | ||
| assert collector.get_book_genre('Книга') == 'Комедии' | ||
|
|
||
| # Тест 7: Получение списка книг с определенным жанром | ||
| def test_get_books_with_specific_genre_returns_correct_books(self, collector): | ||
| # Добавляем книги разных жанров | ||
| collector.books_genre = { | ||
| 'Книга 1': 'Ужасы', | ||
| 'Книга 2': 'Ужасы', | ||
| 'Книга 3': 'Фантастика', | ||
| 'Книга 4': '' | ||
| } | ||
|
|
||
| result = collector.get_books_with_specific_genre('Ужасы') | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Можно улучшить: задача метода - выбор нужных книг из списка, а в тесте возвращаются все. |
||
| assert result == ['Книга 1', 'Книга 2'] | ||
|
|
||
| # Тест 8: Получение словаря books_genre | ||
| def test_get_books_genre_returns_current_dict(self, collector): | ||
| test_books = {'Книга 1': 'Фантастика', 'Книга 2': 'Комедии'} | ||
| collector.books_genre = test_books | ||
| assert collector.get_books_genre() == test_books | ||
|
|
||
| # Тест 9: Получение книг, подходящих для детей | ||
| def test_get_books_for_children_returns_only_child_friendly_books(self, collector): | ||
| collector.books_genre = { | ||
| 'Детская книга': 'Мультфильмы', | ||
| 'Страшная книга': 'Ужасы', | ||
| 'Фантастическая книга': 'Фантастика', | ||
| 'Книга без жанра': '' | ||
| } | ||
|
|
||
| children_books = collector.get_books_for_children() | ||
| assert 'Детская книга' in children_books | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. можно улучшить: достаточно одного ассерта, чтобы проверить состояние списка |
||
| assert 'Фантастическая книга' in children_books | ||
| assert 'Страшная книга' not in children_books | ||
| assert 'Книга без жанра' not in children_books | ||
|
|
||
| # добавляем две книги | ||
| collector.add_new_book('Гордость и предубеждение и зомби') | ||
| collector.add_new_book('Что делать, если ваш кот хочет вас убить') | ||
| # Тест 10: Добавление книги в избранное | ||
| def test_add_book_in_favorites_book_added_to_favorites(self, collector): | ||
| collector.books_genre = {'Любимая книга': 'Фантастика'} | ||
| collector.add_book_in_favorites('Любимая книга') | ||
| assert 'Любимая книга' in collector.favorites | ||
|
|
||
| # проверяем, что добавилось именно две | ||
| # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 | ||
| assert len(collector.get_books_rating()) == 2 | ||
| # Тест 11: Удаление книги из избранного | ||
| def test_delete_book_from_favorites_book_removed(self, collector): | ||
| collector.favorites = ['Книга'] | ||
| collector.delete_book_from_favorites('Книга') | ||
| assert 'Книга' not in collector.favorites | ||
|
|
||
| # напиши свои тесты ниже | ||
| # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() | ||
| # Тест 12: Получение списка избранных книг | ||
| def test_get_list_of_favorites_books_returns_correct_list(self, collector): | ||
| collector.favorites = ['Книга 1', 'Книга 2'] | ||
| favorites = collector.get_list_of_favorites_books() | ||
| assert favorites == ['Книга 1', 'Книга 2'] | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно улучшить: фикстуру лучше хранить в отдельном модуле