Тестирование наших моделей
Для тестирования нашей модели требуется взаимодействие с базой данных.
Поэтому мы будем использовать класс TestCase вместо класса SimpleTestCase.
Поэтому добавим в файл test.py следующий код:
from django.test import TestCase
from .models import Catalog
class CatalogModelTests(TestCase):
""" Тест модели каталога """
def setUp(self):
self.book = Catalog(
title='First Django Book',
ISBN='978-1-60309-3',
author='Ilya Perminov',
price='9.99',
availability='True'
)
def test_create_book(self):
self.assertIsInstance(self.book, Catalog)
def test_str_representation(self):
self.assertEqual(str(self.book), "First Django Book")
def test_saving_and_retrieving_book(self):
first_book = Catalog()
first_book.title = 'First Django Book'
first_book.ISBN = '978-1-60309-3'
first_book.author = 'Ilya Perminov'
first_book.price = '9.99'
first_book.availability = 'True'
first_book.save()
second_book = Catalog()
second_book.title = 'Second Django Book'
second_book.ISBN = '978-3-60124-1'
second_book.author = 'Dmitry Seleznev'
second_book.price = '19.99'
second_book.availability = 'False'
second_book.save()
saved_books = Catalog.objects.all()
self.assertEqual(saved_books.count(), 2)
first_saved_book = saved_books[0]
second_saved_book = saved_books[1]
self.assertEqual(first_saved_book.title, 'First Django Book')
self.assertEqual(second_saved_book.author, 'Dmitry Seleznev')
В приведенном выше коде у нас есть четыре метода тестирования.
- Строка 1-3: мы импортируем
TestCaseкласс, от которогоCatalogModelTestsкласс будет наследоваться. Мы импортируемCatalogмодель. Однако эта модель пока не была создана в нашемmodels.pyфайле.
- Строки 9–16: у нас есть
setUpметод, создающий экземплярCatalogс определенными данными поля.
- Строка 18: у нас есть
test_create_bookметод. Цель состоит в том, чтобы проверить, что новая запись книги, созданная вsetUpметоде, действительно является экземпляром моделиCatalog. Поэтому мы используемassertIsInstanceдля проверки этого.
- Строка 21: у нас есть второй тестовый метод с именем
test_str_representation. Он проверяет, что строковое представление работает должным образом. Этот метод показывает, что строковое представление будет равно полюtitle.
- Строка 24: у нас есть последний тестовый метод под названием
test_saving_and_retrieving_book. Он проверяет, можем ли мы как получить, так и сохранить новую книгу в каталоге.
- Строки 25—31: Создаем и сохраняем книгу в каталоге. Проделываем то же самое с строки 33 по 39.
- Строки 41 и 42: мы используем
assertEqualдля проверки успешности сохранения книг.
- Строки 44–47: мы извлекаем название из первой и автора из второй книги соответственно. Затем мы проверяем, соответствуют ли они соответствующим данным.
Запускаем тесты
После написания тестов пришло время их запустить. Это второй шаг процесса TDD, и тесты должны провалиться. Это покажет, что тесты действительно проверяют что-то новое, что еще не реализовано.
Запустите каждый метод тестирования независимо, используя следующие команды:
-
python manage.py test elibrary_app.tests.CatalogModelTests.test_create_book
-
python manage.py test elibrary_app.tests.CatalogModelTests.test_str_representation
-
python manage.py test elibrary_app.tests.CatalogModelTests.test_saving_and_retrieving_book
Мы должны получить неудачные тесты, поскольку мы еще не реализовали эту функцию, написав модель Catalog.