【问题标题】:Django Unit Test Case for Models, Serializers, URL's & Views模型、序列化器、URL 和视图的 Django 单元测试用例
【发布时间】:2022-01-06 12:09:01
【问题描述】:

我是单元测试的新手。因为我需要为以下模型、序列化程序、视图和 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

Views.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'

tests.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")

谁能帮忙整理一下这些。您提供的任何详细文档或帮助都将是一个很好的支持。

【问题讨论】:

  • 可以看源码,里面没有定义get_last_name方法
  • self.assertEquals(user.last_name, "Johnson")

标签: python django unit-testing django-models django-views


【解决方案1】:

用户对象没有像get_last_name 这样的函数。您可以像这样直接调用该属性:


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

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多