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
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
# qa_python
# qa_python
В данном проекте сделаны 9 тестов на различные сценарии для класса BooksCollector. 2 теста объединено в 1 (используя параметризацию). Теперь кратко о каждом тесте:

№1 - тест на добавление 2-ух книг
№2 - тест на слишком длинное название книги
№3 - тест на добавление книги-дупликата
№4 - параметризованный тест на существующую / несуществующую книгу
№5 - тест на получение списка книг по жанру
№6 - тест метода get_books_genre
№7 - тест на сортировку детских и взрослых жанров
№8 - тест на добавление книги в любимые + тест на дупликат
№9 - тест на удаление книги из любимых

Это далеко не все тесты, которые можно сделать для класса BooksCollector, но я старался сделать наиболее важные из них.
71 changes: 63 additions & 8 deletions tests.py
Original file line number Diff line number Diff line change
@@ -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()
Comment on lines +27 to +30

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Стоит разделить позитивные/негативные тесты


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()
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()