Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .coverage
Binary file not shown.
Binary file added __pycache__/conftest.cpython-313-pytest-8.4.1.pyc
Binary file not shown.
Binary file added __pycache__/main.cpython-313.pyc
Binary file not shown.
Binary file added __pycache__/tests.cpython-313-pytest-8.4.1.pyc
Binary file not shown.
5 changes: 5 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from main import BooksCollector
import pytest
@pytest.fixture
def collector():
return BooksCollector()
12 changes: 12 additions & 0 deletions read.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
1 тест(базовый) add_new_book_add_two_books проверяет добавление 2 новых книг в словарь без указания жанра
2 тест test_add_new_book__len_more_than_40_failed проверяет, что в словарь не добавляются книги, название которых более 40 символов
3 тест test_add_book_in_favorites_sucсess проверяет успешное добавление книги в избранное
4 тест test_add_book_in_favorites_two_equal_books_failed проверяет, что повторно одна и та же книга в избранное не добавляется
5 тест test_delete_book_from_favorites_success проверяет удаление книги из избранного
6 тест test_set_book_genre_in_list_success проверяет корректность присвоения методом жанра книги и возврат установленного жанра
7 тест test_set_book_genre_assign_genre_not_inlist_failed проверяет, что метод не присваевает книге невалидный жанр
8 тест test_get_book_genre_by_name_success проверяет вывод жанра книги по ее названию
9 тест test_get_books_with_specific_genre_success проверяет список книг с определённым жанром
10 тест test_get_books_for_children_success проверяет книги, которые подходят детям(у которых не установлен специальный рейтинг
11 тест test_get_list_of_favorites_books_success проверяет, что после добавления книги в избранное, книга добавляется в избранное
12 тест test_get_book_genre_success проверяет, что метод выводит ожидаемый результат из добавленных книг и их жанров
104 changes: 87 additions & 17 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,94 @@
from main import BooksCollector

# класс TestBooksCollector объединяет набор тестов, которыми мы покрываем наше приложение BooksCollector
# обязательно указывать префикс Test
import pytest
class TestBooksCollector:

# пример теста:
# обязательно указывать префикс test_
# дальше идет название метода, который тестируем add_new_book_
# затем, что тестируем add_two_books - добавление двух книг
def test_add_new_book_add_two_books(self):
# создаем экземпляр (объект) класса BooksCollector
collector = BooksCollector()

# добавляем две книги
def test_add_new_book_add_two_books(self, collector):
collector.add_new_book('Гордость и предубеждение и зомби')
collector.add_new_book('Что делать, если ваш кот хочет вас убить')
assert len(collector.get_books_genre()) == 2

def test_add_new_book_len_more_than_40_failed(self, collector):
collector.add_new_book('Сказка о царе Салтане, о сыне его славном и могучем богатыре князе Гвидоне Салтановиче и о прекрасной Царевне Лебеди')
assert len(collector.get_books_genre()) == 0

def test_add_book_in_favorites_sucсess(self, collector):
collector.add_new_book('Преступление и наказание')
collector.add_book_in_favorites('Преступление и наказание')
assert len(collector.get_list_of_favorites_books()) == 1

def test_add_book_in_favorites_two_equal_books_failed(self, collector):
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_success(self, collector):
collector.add_new_book('Сказка о золотой рыбке')
collector.add_book_in_favorites('Сказка о золотой рыбке')
collector.delete_book_from_favorites('Сказка о золотой рыбке')
assert len(collector.get_list_of_favorites_books()) == 0

@pytest.mark.parametrize('genre', ['Фантастика', 'Ужасы', 'Детективы', 'Мультфильмы', 'Комедии'])
def test_set_book_genre_in_list_success(self, genre, collector):
collector.add_new_book('Бегущий по лезвию')
collector.set_book_genre('Бегущий по лезвию', genre)
assert collector.get_book_genre('Бегущий по лезвию') == genre

@pytest.mark.parametrize('genre_not_inlist', ['Триллер', 'Мелодрама'])
def test_set_book_genre_not_inlist_failed(self, genre_not_inlist, collector):
collector.add_new_book('Поющие в терновнике')
collector.set_book_genre('Поющие в терновнике', genre_not_inlist)
assert collector.get_book_genre('Поющие в терновнике') != genre_not_inlist

@pytest.mark.parametrize('name,genre', [
['Заживо в темноте', 'Ужасы'],
['Золотой теленок', 'Комедии'],
['Восточный экспресс', 'Детективы']
]
)
def test_get_book_genre_by_name_success(self, name, genre, collector):
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: тест все еще не отличается от теста установки жанра. Нужно либо не использовать в этом тесте set метод, либо сравнивать с содержимым словаря

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

исправлено

collector.books_genre[name] = genre
assert collector.get_book_genre(name) == genre


@pytest.mark.parametrize('name,genre', [
['Заживо в темноте', 'Ужасы'],
['Восточный экспресс', 'Детективы']
]
)
def test_get_books_with_specific_genre_success(self, name, genre, collector):
collector.add_new_book(name)
collector.set_book_genre(name, genre)
books_with_specific_genre = collector.get_books_with_specific_genre(genre)
assert name in books_with_specific_genre

@pytest.mark.parametrize('name,genre,specific_genre', [
['Заживо в темноте', 'Ужасы', True],
['Восточный экспресс', 'Детективы', True],
['Золотой ключик','Мультфильм', False]
]
)
def test_get_books_for_children_success(self, name, genre, specific_genre, collector):
collector.add_new_book(name)
collector.set_book_genre(name, genre)
books_with_specific_genre = collector.get_books_with_specific_genre(specific_genre)
books_for_children = collector.get_books_for_children()
assert (name in books_for_children) != books_with_specific_genre

# проверяем, что добавилось именно две
# словарь books_rating, который нам возвращает метод get_books_rating, имеет длину 2
assert len(collector.get_books_rating()) == 2
def test_get_list_of_favorites_books_success(self, collector):
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: тест аналогичен тесту добавления в избранное. Тут нужно проверить, что возвращается именно нужный список. Метод добавления в список можно не использовать, а создать его напрямую

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

исправлено

collector.favorites = ['Золотой ключик']
assert collector.get_list_of_favorites_books() == ['Золотой ключик']

def test_get_book_genre_success(self, collector):
collector.add_new_book('Заживо в темноте')
collector.set_book_genre('Заживо в темноте', 'Ужасы')
collector.add_new_book('Золотой теленок')
collector.set_book_genre('Золотой теленок', 'Комедии')
collector.add_new_book('Восточный экспресс')
collector.set_book_genre('Восточный экспресс', 'Детективы')
assert collector.get_books_genre() == {
'Заживо в темноте':'Ужасы',
'Золотой теленок':'Комедии',
'Восточный экспресс':'Детективы'
}

# напиши свои тесты ниже
# чтобы тесты были независимыми в каждом из них создавай отдельный экземпляр класса BooksCollector()