Модульные тесты Django - PullRequest
       3

Модульные тесты Django

0 голосов
/ 16 ноября 2018

Каков наилучший способ написания примеров модульных тестов django, которые включают в себя изменения базы данных, такие как изменение статуса объекта ???Например: - У меня есть разные тестовые случаи, когда статус объекта изменяется на основе действий, отличных от действий пользователей, которые вызывают изменения на уровне баз данных.

Какой наилучший подход для работы с тестовыми примерами для таких операций.

def post(self, request, *args, **kwargs):
    if action==1:
        Entity.last_status= Entity.status
        Entity.status = 1
        Entity.save()
    elif action == 2:
        Entity.last_status = Entity.status
        Entity.status = 2
        Entity.save() 

и так далее ... !!!-

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать тест Django Client, как описано в ответе MaximeK, или другой способ - напрямую вызвать представление. Вы можете создать объект HttpRequest и передать его в представление при вызове.

from django.http import HttpRequest

def test_set_entity_status(self):
    # Set up the request
    request = HttpRequest()
    request.method = 'POST'
    request.POST['action'] = 1

    # Call the view function directly
    post(request)

    # Perform the assertions
    last_entity = Entity.objects.last()
    self.assertEqual(last_entity.status, 1)
0 голосов
/ 16 ноября 2018

Привет У Django есть много объектов TestCase для тестирования этой цели:

Небольшой пример класса:

import unittest
from django.test import Client

class SimpleTest(unittest.TestCase):
    def setUp(self):
        self.client = Client()

    def test_action_1(self):
        # Issue a POST request.
        response = self.client.post('/YOUR_POST_URL/', {'action': 1})
        # Check that the response is 200 OK.
        self.assertEqual(response.status_code, 200)
        # Check the last entry
        last_entry = Entry.objects.last()
        self.assertEqual(last_entry.status, 1)

        response = self.client.post('/YOUR_POST_URL/', {'action': 2})
        # Check that the response is 200 OK.
        self.assertEqual(response.status_code, 200)        
        # Check that the response is 200 OK.
        self.assertEqual(response.status_code, 200)
        # Check the last entry
        last_entry = Entry.objects.last()
        self.assertEqual(last_entry.status, 2)   
        self.assertEqual(last_entry.last_status, 1)   

Что этот тест делает?

Он создастпустая база данных выполнит миграцию, выдайте запрос POST с параметрами action=1, мы проверяем статус 200 (выполнено без ошибок) и проверяем, есть ли у нас в базе данных Entry с status=1.Теперь мы делаем то же самое с параметрами action=2 и проверяем сейчас status и last_status.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...