首页 > 解决方案 > 如何使用 pytest 在 django 的 unittest 中使用 Foregienkey 对自定义产品模型进行单元测试

问题描述

我正在尝试对具有 pytest 前键的特定模型进行单元测试,但经过大量努力,我仍然面临错误,而且我是单元测试的新手。

错误 :

  @pytest.mark.django_db
    def test_create_pg(client):
        user=PPuseers.objects.create(Uid='6fa459ea-ee8a-3ca4-894e-db77e160355e')
        make_pg=PG()
>       assert PG.objects.count==0
E       assert <bound method BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method of <django.db.models.manager.Manager object at 0x04E8D220>> == 0
E        +  where <bound method BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method of <django.db.models.manager.Manager object at 0x04E8D220>> = <django.db.models.manager.Manager object at 0x04E8D220>.count
E        +    where <django.db.models.manager.Manager object at 0x04E8D220> = PG.objects

PPpgOwner\test\test_views.py:41: AssertionError

我的模型.PY


class PG(models.Model):
    
    pg_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    pg_Owner = models.ForeignKey(PPuseers, on_delete=models.CASCADE)

    pg_name = models.CharField(max_length=255,default='Null')
    location = models.CharField(max_length=50,default='Null')
    describtion = models.CharField(max_length=10000, default='Null')
    

    pg_main_price = models.IntegerField(default=0)
    pg_discount_price = models.IntegerField(default=0,blank=True,null=True)
     ......
     .......

PPusers 模型喜欢这个模型

PP用户模型

   
class PPuseers(AbstractBaseUser, PermissionsMixin):
    Uid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField(verbose_name="email", max_length=554, unique=True)
    username = models.CharField(max_length=500, unique=False)
    date_joined = models.DateTimeField(verbose_name="Date joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
    is_admin = models.BooleanField(default=False)
    ......
    ......
    ......

我的pytest:

from django import urls
from django.contrib.auth import get_user_model
from django.http import response
from django.urls.base import reverse
from PPCustomer.models import PPuseers
from PPpgOwner.models import PG



@pytest.mark.django_db
def test_create_ppuser(client,ppuser_data):
   user=PPuseers.objects.create(Uid='6fa459ea-ee8a-3ca4-894e-db77e160355e')
   assert PPuseers.objects.count()==1


@pytest.mark.django_db
def test_create_pg(client):
    user=PPuseers.objects.create(Uid='6fa459ea-ee8a-3ca4-894e-db77e160355e')
    make_pg=PG()
    assert PG.objects.count==0
    pg_tester=PG.objects.create(
    pg_id='6fa459ea-ee8a-3ca4-894e-db77e160355e',
    
    pg_Owner ='dddddd',
    pg_name ='Raise_PG',
    describtion = 'all pg descriptions ',
    pg_main_price = 43456,
    address='my pg _address',
    pin=7133872,
    
    )
    k=PG.objects.count()==1
    assert k.status_code==200

我已经尝试过使用Testcase ,但我也面临这个foregienkey的问题......我对单元测试完全陌生,所以请告诉我我已经完成了waht吗?最好的方法是什么?严重卡在这里所有的帮助都是appriciated。

先感谢您!

标签: pythondjangounit-testingdjango-modelspytest

解决方案


推荐阅读