한 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_ 로 시작해야 테스트가 실행된다.
다음은 간단한 테스트 케이스들의 구현이다. 다 가져오지는 않고 테스트 구현 시 유용하게 사용될 것 같은 부분들 위주로 가져왔다.
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)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertTrue(serializer.is_valid())
: coverage를 활용하여 다양한 케이스에 대해 테스트하고, 각 모듈마다 테스트 케이스를 잘 방어하는지 확인 가능하다.
pip install coverage
coverage run manage.py test
coverage report
Test에 대해서는 더 자세한 설명이 추가 된 다음 링크를 첨부한다.
Django Test - unit test, user test, coverage
: 코드를 직접 구현하게되면 다시 막막할 것 같지만, 그래도 기능들의 구현을 정리하면서 대략적인 감을 잡은 것 같다. 프로젝트를 하게 된다면 기능을 정확하게 정의하고, 미리 계획하는 작업이 더 중요해진 것 같다는 생각이 든다.