如何为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 中运行测试。 另外,我看过很多编写测试的例子,但又一次被搞糊涂了。看来我需要在基础上工作。
答案 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)。