繁体   English   中英

Django 模型、序列化程序、URL 和视图的单元测试用例

[英]Django Unit Test Case for Models, Serializers, URL's & Views

我是单元测试的新手。 因为我需要为以下模型、序列化程序、视图和 url 执行测试用例。 任何人都可以请帮忙。

模型.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth import get_user_model
# Create your models here.

class User(AbstractUser):
    """This Class is used to extend the in-build user model """
    ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
    GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
    date_of_birth = models.DateField(verbose_name='Date of Birth', null=True)
    profile_image = models.ImageField(upload_to='media/profile_images', verbose_name='Profile Image', default='media/profile_images/default.webp', blank=True)
    bio = models.TextField(verbose_name='Bio')
    role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES)
    gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
    following = serializers.SerializerMethodField()
    followers = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = ('first_name','last_name','username','password','email','date_of_birth',
                  'profile_image','bio','role','gender', 'following','followers')
        extra_kwargs = {'is_active':{'write_only':True},
                        'password':{'write_only':True}}

    def create(self, validated_data):
        logger.info('Information Incoming!')
        return User.objects.create_user(**validated_data)

    def update(self, *args, **kwargs):
        user = super().update( *args, **kwargs)
        p = user.password
        user.set_password(p)
        user.save()
        return user

    
    def get_following(self, obj):
        return FollowingSerializer(obj.following.all(), many=True).data

    def get_followers(self, obj):
        return FollowersSerializer(obj.followers.all(), many=True).data

视图.py

class UserAPI(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
    # permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]

我尝试实现单元测试用例但收到错误self.assertEquals(user.get_last_name(), "Johnson") - AttributeError: 'User' object has no attribute 'get_last_name'

测试.py

class UserTests(TestCase):
    def setUp(self):
        User.objects.create(
            first_name='Louis',last_name='Johnson',username='louis.johnson',
            email='louis@mail.com',date_of_birth='1994-12-12', bio='Hello I am Louis',
            role='MODERATOR',gender='MALE')

    def test_users_model(self):
        user = User.objects.get(first_name='Louis')
        self.assertEquals(user.get_last_name(), "Johnson")
        self.assertEquals(user.get_username(), "louis.johnson")

任何人都可以帮助整理这些。 您提供的任何详细文档或帮助都将是一个很好的支持。

用户 object 没有像 get_last_name 这样的get_last_name 您可以像这样直接调用该属性:


def test_users_model(self):
        user = User.objects.get(first_name='Louis')
        self.assertEquals(user.last_name, "Johnson")
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM