diff --git a/README.md b/README.md index 1cc701d..40bc974 100644 --- a/README.md +++ b/README.md @@ -1 +1,14 @@ -# qa_python \ No newline at end of file +# qa_python +В данном проекте сделаны 9 тестов на различные сценарии для класса BooksCollector. 2 теста объединено в 1 (используя параметризацию). Теперь кратко о каждом тесте: + +№1 - тест на добавление 2-ух книг +№2 - тест на слишком длинное название книги +№3 - тест на добавление книги-дупликата +№4 - параметризованный тест на существующую / несуществующую книгу +№5 - тест на получение списка книг по жанру +№6 - тест метода get_books_genre +№7 - тест на сортировку детских и взрослых жанров +№8 - тест на добавление книги в любимые + тест на дупликат +№9 - тест на удаление книги из любимых + +Это далеко не все тесты, которые можно сделать для класса BooksCollector, но я старался сделать наиболее важные из них. \ No newline at end of file diff --git a/tests.py b/tests.py index 383385e..b8bebe6 100644 --- a/tests.py +++ b/tests.py @@ -1,24 +1,79 @@ +import pytest + 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): + + def test_add_new_book_add_two_books(self): #1 # создаем экземпляр (объект) класса BooksCollector collector = BooksCollector() - # добавляем две книги collector.add_new_book('Гордость и предубеждение и зомби') collector.add_new_book('Что делать, если ваш кот хочет вас убить') - # проверяем, что добавилось именно две # словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2 - assert len(collector.get_books_rating()) == 2 + assert len(collector.get_books_genre()) == 2 # исправил на collector.get_books_genre() + + # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() + @pytest.mark.parametrize('name, expected_added', [('A' * 39, True), ('A' * 40, True), ('A' * 41, False)]) + def test_add_new_book_name_length_boundaries(self, collector, name, expected_added): + collector.add_new_book(name) + if expected_added: + assert name in collector.get_books_genre() + else: + assert name not in collector.get_books_genre() + + def test_add_new_book_with_same_name_not_added(self): #3, тест на дупликат + collector = BooksCollector() + collector.add_new_book('Гнев дяди Андрея') + collector.add_new_book('Гнев дяди Андрея') + assert len(collector.get_books_genre()) == 1 + + def test_set_book_genre_existing_book(self, collector): #4, тест на успешную установку жанра существующей книге + collector.add_new_book('Гнев дяди Андрея') + collector.set_book_genre('Гнев дяди Андрея', 'Фантастика') + assert collector.get_book_genre('Гнев дяди Андрея') == 'Фантастика' + + def test_set_book_genre_unknown_book_no_effect(self, collector): #5, тест на установку жанра несуществующей книге без эффекта + collector.add_new_book('Гнев дяди Андрея') + collector.set_book_genre('Добри дядя Андрюша', 'Комедии') + assert collector.get_book_genre('Гнев дяди Андрея') == '' + + def test_get_books_with_specific_genres(self, collector): #5, тест на получение списка книг по жанру + collector.add_new_book('Кн1') + collector.set_book_genre('Кн1', 'Комедии') + collector.add_new_book('Кн2') + collector.set_book_genre('Кн2', 'Ужасы') + assert collector.get_books_with_specific_genre('Комедии') == ['Кн1'] + + def test_get_books_genre_returns_dict(self, collector): #6, тест метода get_books_genre + collector.add_new_book('Дбд') + books = collector.get_books_genre() + assert 'Дбд' in books + + def test_get_books_for_children_without_high_age_rating(self, collector): #7, тест на сортировку детских и взрослых жанров + collector.add_new_book('Для детей') + collector.set_book_genre('Для детей', 'Мультфильмы') + collector.add_new_book('Для взрослых') + collector.set_book_genre('Для взрослых', 'Ужасы') + assert collector.get_books_for_children() == ['Для детей'] + + def test_add_book_in_favorites_and_duplicate(self, collector): #8, тест на добавление книги в любимые + тест на дупликат + collector.add_new_book('Гнев дяди Андрея') + collector.add_book_in_favorites('Гнев дяди Андрея') + collector.add_book_in_favorites('Гнев дяди Андрея') # книга_дупликат + favorites = collector.get_list_of_favorites_books() + assert 'Гнев дяди Андрея' in favorites + assert favorites.count('Гнев дяди Андрея') == 1 - # напиши свои тесты ниже - # чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector() \ No newline at end of file + def test_del_book_from_favorites(self, collector): #9, тест на удаление книги из любимых + collector.add_new_book('Гнев дяди Андрея') + collector.add_book_in_favorites('Гнев дяди Андрея') + collector.delete_book_from_favorites('Гнев дяди Андрея') + assert 'Гнев дяди Андрея' not in collector.get_list_of_favorites_books()