如何解决创建的 Django 测试对象为空
我正在尝试按照 Django 文档中的说明进行操作: https://docs.djangoproject.com/en/3.2/topics/testing/overview/
但是,当我尝试为测试创建对象时。对象是空的??
这是我的代码:
from django.test import TestCase,Client
from django.urls import reverse
from .models import ShortURL
from .views import generate_shortURL,redirect,home
from datetime import datetime
url = "https://stackoverflow.com/"
time = datetime.Now()
class TestURLShortener(TestCase):
def setup(self):
self.client = Client()
obj= ShortURL.objects.create(original_url=url,short_url='zqSkSQ',time_date_created=time,count=2)
obj.save()
def test_creating_short_URL_POST(self):
"""
Test to create short Urls
"""
short_url_from_db = ShortURL.objects.all()
print(f'short_url_from_db : {short_url_from_db}')
response = self.client.post(reverse('generate_shortURL'),data={'original_url': url})
generated_short_url = response.context["chars"]
self.assertEquals(generated_short_url,'afasdf')
这是我运行测试时的结果:
short_url_from_db
打印出这个 <QuerySet []>
而不是我希望它从 setup 函数打印出的对象。
如何获取我创建的对象以在此测试中使用?
解决方法
您需要使用 setUp
而不是 setup
作为设置测试用例的函数。
如果您使用 save()
,您也不需要调用 create()
。
您可以使用的替代方法是 setUpTestData()
与使用 setUp()
相比,这种技术允许更快的测试。
class TestURLShortener(TestCase):
@classmethod
def setUpTestData(cls):
# Set up data for the whole TestCase
cls.obj = ShortURL.objects.create(original_url=url,short_url='zqSkSQ',time_date_created=time,count=2)
...
def setUp(self):
self.client = Client()
def test_obj_type(self):
self.assertTrue(isinstance(self.obj,ShortURL))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。