TIL) 데브코스 15일차 - Django(5)

Pori·2023년 11월 3일
0

데엔

목록 보기
10/47

Serializer 중첩

한 Serializer 내에 다른 Serializer를 등록해서 출력하는 것이 가능하다.

class ChoiceSerializer(serializers.ModelSerializer): 
    class Meta:
        model = Choice
        fields = ['choice_text', 'votes']

class QuestionSerializer(serializers.ModelSerializer):
    ...
    choices = ChoiceSerializer(many=True, read_only=True)
    class Meta:
        model = Question
        fields = ['id','question_text', ... ,'choices']

테스팅

test.py를 활용하여 자동화 테스트가 가능하다.

APITestCase를 활용하여 보다 편리하게 테스트 케이스를 구현 가능하다. from rest_framework.test import APITestCase

함수의 이름은 test_ 로 시작해야 테스트가 실행된다.

다음은 간단한 테스트 케이스들의 구현이다. 다 가져오지는 않고 테스트 구현 시 유용하게 사용될 것 같은 부분들 위주로 가져왔다.

  • setUp을 활용하여 공통으로 쓰이는 값들을 미리 설정
    class QuestionListTest(APITestCase):
        def setUp(self):
            self.question_data = {'question_text': 'some question'}
            self.url = reverse('queston-list')
    
  • 강제 로그인
    user =User.objects.create(username='testuser', password='testpass')
            self.client.force_authenticate(user=user)
  • assertEqual : 출력 값을 비교해준다.
    self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
  • assertTrue : 값이 True인지 확인한다.
    self.assertTrue(serializer.is_valid())

coverage

: coverage를 활용하여 다양한 케이스에 대해 테스트하고, 각 모듈마다 테스트 케이스를 잘 방어하는지 확인 가능하다.

  • 설치 : pip install coverage
  • 실행 : coverage run manage.py test
  • 리포트 확인 : coverage report

Test에 대해서는 더 자세한 설명이 추가 된 다음 링크를 첨부한다.

Django Test - unit test, user test, coverage


공부 한 내용

  • Vote 구현
  • Test 구현 및 coverage 사용

새롭게 배운 내용

  • coverage를 통한 각 모듈 테스트
  • vote기능 validate

느낀점&참고

: 코드를 직접 구현하게되면 다시 막막할 것 같지만, 그래도 기능들의 구현을 정리하면서 대략적인 감을 잡은 것 같다. 프로젝트를 하게 된다면 기능을 정확하게 정의하고, 미리 계획하는 작업이 더 중요해진 것 같다는 생각이 든다.

0개의 댓글