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보다 크게 바꿔주면 테스트가 성공함