Django 테스트에서 AutoField가 초기화되지 않는 경우

송용진·2025년 7월 29일

Python / Django

목록 보기
14/23
from rest_framework.test import APITestCase
...

class TestPageDetailAPIView(APITestCase):
    def setUp(self):
        ...
        self.page = Page.objects.create(
            name = "테스트 페이지1",
            description = "테스트 페이지1의 description입니다.",
        )
        ...
    # 성공 테스트
    def test_page_detail_includes_ordered_posts(self):
        ...
    
    def test_page_detail_returns_empty_posts_when_none_exist(self):
        '''
        정상 동작에 대한 경계 상황(edge case) 테스트
        '''
        page_without_posts = Page.objects.create(
            name="빈 페이지",
            description = "빈 페이지의 description입니다.",
        )
        url = reverse("pages:page-detail", kwargs={"pk": page_without_posts.pk})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data["posts"], [])

    # 실패 테스트
    def test_page_detail_returns_404_for_nonexistent_page(self):
        url = reverse("pages:page-detail", kwargs={"pk": 2})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

테스트 데이터는 테스트마다 깨끗하게 지워짐
하지만 AutoField(PK)의 증가 값은 초기화되지 않음
PostgreSQL처럼 SEQUENCE를 쓰는 DB는
테스트 간 PK 값이 계속 증가

    # 실패 테스트
    def test_page_detail_returns_404_for_nonexistent_page(self):
        url = reverse("pages:page-detail", kwargs={"pk": 3})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

pk가 2까지 증가된 이력이 있기 때문에
pk를 2보다 크게 바꿔주면 테스트가 성공함

profile
개발자

0개의 댓글