微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建的 Django 测试对象为空

如何解决创建的 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 举报,一经查实,本站将立刻删除。