我有models.py文件。我该如何为它编写测试?要测试什么?

时间:2021-04-12 08:29:44

标签: python django

如何为models.py文件编写测试?

from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib.auth.models import User


class Profile(models.Model): #new
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    institute = models.CharField(max_length=200, null=True)
    department = models.CharField(max_length=200, null=True)

    def __str__(self):
        return 'Email:{} Department:{} Institute:{}'.format(self.user.email, self.institute, self.department)


class Access(models.Model):
    user = models.ManyToManyField(User)
    endpoint = models.CharField(
        max_length=20,
        choices=(
            ('pubmed', 'pubmed'),
            ('foster', 'foster'),
            ('med_apps', 'med_apps'),
            ('mayerson_transcripts', 'mayerson_transcripts'),
            ('all', 'all')
        ),
        unique=True
    )

    def __str__(self):
         return self.endpoint


class Request(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    created_time = models.DateTimeField(default=timezone.now)
    url = models.CharField(max_length=1000)
    def start(self):
        self.created_time = timezone.now()
        self.save()

    def __str__(self):
        return 'url:{} time:{}'.format(self.url, self.created_time)

需要在 Visual Studio Code 中运行测试。 另外,我看过很多编写测试的例子,但又一次被搞糊涂了。看来我需要在基础上工作。

2 个答案:

答案 0 :(得分:0)

取决于你的逻辑在哪里(在 django 视图或模型中)以及动作发生的位置,你编写测试,在上面的例子中我没有看到任何逻辑或动作,我会给你简单的例子,下面是在注册视图上编写测试的示例:

from django.test import Client
from django.test import TestCase
from account.models import Account

class TestSequenceFunctions(TestCase):
        
    def test_signup_index_view(self):  #Test number 1

        response = self.client.post(reverse('acc:signup'), data=
         {'fname':'ftest',
         'lname':'ltest',
         'email':'foo2@bar.com', 
         'password':'1111',
         'pass2':'1111',
         'field':'something',
         'degree':'1',
         }, follow=True)

        self.assertEqual(response.status_code, 200)

答案 1 :(得分:0)

创建一个 test_models.py 文件 - 注意,对于视图、模型、apis 等,建议有一个单独的测试文件:

test_views.py
test_api.py
test_models.py
test_tasks.py

您的模型非常简单,没有什么可以测试的。例如,您可以测试您的请求模型,以及启动函数是否正在更改 created_time 字段。例如:

def test_start(mocker):
    request_model =  RequestFactory.create()
    request_model.start()
    assert request_model.created_time == timezone.now()

您还可以模拟“save”方法并断言它正在被调用。例如:

save_patch = mocker.patch('app_name.models.Request.save')
save_patch.assert_called_once()
save_patch.assert_called_once_with(params)

我建议从更简单的示例开始,而不是时区字段,因为我不确定测试可能不会通过的延迟。

您可以找到如何mock objects and assert that they are called 使用 Factory Boy and DjangoModelFactory 创建用于测试的假对象(例如示例中的 RequestFactory)。

相关问题