Быстрая проверка приложения Django

При завершении написания кода вам нужно проверить, что ваш код выполнил то, что от него требовалось.
Ручное тестирование вашего кода может быть по умолчанию.

  • Вы просматриваете пользовательский интерфейс и имитируете процессы, которым должны следовать пользователи.
  • Вы используете некоторые операторы печати для проверки вводов и выходов.
  • Если процесс зависит от некоторых элементов базы данных, вы создаете фиктивные объекты.
  • После всего этого вы отправляете свое приложение.

    После этого вы думаете, что закончили проект. В большинстве случаев вы ошибались! Это либо скрытая ошибка, либо нужно добавить новую функцию!
  • Вы работаете над тем, что есть, и снова отправляете приложение.
  • Внезапно вы обнаружите, что интерфейс, который вы тестировали и написали много операторов печати, не сработал!
    Вы видите, к чему я клоню:
    -Вы проводите ручное тестирование снова и снова, и цикл продолжается без остановки!

Автоматическое тестирование

  • Вы пишете тест
  • Вы запускаете тест
  • Вы отправляете приложение.
    Необходимость в модификации…?
  • Вы изменяете
  • Вы запускаете тест
  • Вы отправляете приложение.
    Необходимость в новой функции…?
  • Вы добавляете функцию
  • Вы запускаете тест
  • Вы отправляете приложение.
    Вы пишете тест для своего модуля один раз и можете запускать его множество раз.

Уменьшение тестирования

Документация Django расширяет возможности написания тестов
Создание фиктивных данных в ваших тестовых функциях может показаться пугающим и утомительным, особенно когда вам нужно заполнить базу данных. Один из способов быстрого тестирования – использовать https://model-bakery.readthedocs.io/en/latest/index.html . Это создает приспособления, необходимые для тестирования вашего приложения, в то время как вы концентрируетесь на написании тестов .

Как пользоваться моделью

Предположим, у нас есть приложение с книгами
в файле models.py:

from django.db import models

class Author(models.Model):
  name = models.CharField(max_length=250)
    joined = models.DateField(auto_now_add=True)
    
    def __str__(self):
    	return self.name
        
    def book_list(self):
    	return self.book_set.all()
        
    def active_book_list(self):
    	return self.book_set.filter(published=True)
        
        
class Book(models.Model):
  author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    synopsis = models.TextField()
    published = models.BooleanField()
    pages = models.IntegerField()
    
    def __str__(self):
    	return f"{self.title} by {self.author.name}"

Чтобы использовать модель, запустите: pip install model_bakery

В вашем файле tests.py

from django.test import TestCase
from model_bakery import baker
from books.models import Author, Book

class AuthorTest(TestCase):

    def setUp(self):
    	#create a dummy author
        self.author = baker.make(Author)
        #create published books by the author
        self.published_books = baker.make(Book, author=self.author, _quantity=5)
        #the first argument is the model of the object you want to create
        #the second argument, which is optional, is the field(s) you want to 				#provide value for. It is necessary here because I want to test the 			#books written by self.author. If I do not set it, bakery will 					#autogenerate random author(s) for the book(s)
        #the third argument, which is also optional, is the quantity of objects to 				#be created
        self.unpublished_books = baker.make(Book, author=self.author, _quantity=5)
    
    #to test that our active_book_list function works properly
    def test_active_book_list(self):
    	author = self.author
        published_books = self.author.active_book_list()
        number_of_published_books = len(published_books)
    	self.assertEqual(number_of_pulished_books, 5)
    	#self.author has 10 books in total but we expect this function to give 				#return 5 books
    	

Теперь запустите: python manage.py test чтобы протестировать свой проект
Или запустите: python manage.py test books чтобы протестировать только приложение с книгами

Вывод вашего терминала должен выглядеть примерно так:
testing_blog.png

Итак, каждый раз, когда вы исправляете ошибку или добавляете новые функции, запускайте: python manage.py test для тестирования вашего проекта или запуска: python manage.py test books для тестирования только вашего приложения с книгами, чтобы проверить, что ваш модуль active_book_list работает должным образом.

Ответить