В этом уроке мы напишем простейший код, который обеспечит успешное выполнение теста, а также обсудим рефакторинг. Это означает, что в этом уроке мы "соединяем" оставшиеся три шага TDD.
Модель Catalog
Вот полная модель, показывающая продолжение проекта для этого курса:
from django.db import models
class Catalog(models.Model):
STATUS_CHOICES = (
('true', 'True'),
('false', 'False'),
)
title = models.CharField(max_length=255)
ISBN = models.CharField(max_length=13)
author = models.CharField(max_length=255)
price = models.DecimalField(max_digits=6, decimal_places=2)
availability = models.CharField(max_length=5, choices=STATUS_CHOICES, default='false')
def __str__(self):
return self.title
Давайте разберем модель.
- Строки 5–8: у нас есть кортеж, в котором указано, доступна ли книга.
- Строки 10–12: у нас есть поля
title,ISBN, иauthorстрокового типа.
- Строка 13: у нас есть совершенно другой тип, известный как
DecimalFieldдля поляprice. Он имеет два аргументаmax_digits— иdecimal_places. Аргументmax_digitsуказывает максимальное количество допустимых цифр. Аргументdecimal_placesтипизирует десятичные разряды числа.
- Строка 14: У нас также есть строковое поле с раскрывающимся списком.
После написания модели следующим шагом выполните миграцию базы данных с помощью команд makemigrations и migrate.
Запускаем тесты
Четвертый шаг 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
Запустите глобальный тест, чтобы убедиться, что все тесты проходят с помощью этой команды:
-
python manage.py test
Рефакторинг и улучшение модели
Рефакторинг кодовой базы неизбежен по мере роста проекта. Также важно улучшить качество кода. Однако мы всегда должны стремиться писать простой для понимания код, не усложняя его.
Рефакторинг не является обязательным в процессе TDD. В этом случае ясно, что тесты фиксируют то, для чего предназначен код. В нашем случае рефакторить тест и Catalog модель нет необходимости.