앱을 생성 후 tests.py 파일에
from django.test import TestCase, Client
import하기
def setUp(self):
_test로 시작하는 테스트를 시작하기 전에 setup(db 설정)을 해주는 함수
client 초기화, 테스트에 필요한 데이터베이스를 설정
def tearDown(self):
테스트가 끝나고 수행되는 함수
테스트하기위해 setup했던 데이터베이스를 정리해주는 작업을 수행
def test_
실제로 테스트가 이루어지는 함수
테스트를 성공, 실패, 각종 에러 여러부분으로 나누어서 views.py에서 짠 로직과 비교해 잘 작동되는지 테스트한다.
터미널에서 python manage.py test (app이름)으로 테스트파일 실행
class PinDetailTest(TestCase):
def setUp(self):
SocialPlatform.objects.create(
id = 1,
name = 'Pinterest'
)
Gender.objects.create(
id = 1,
name = '남성'
)
Region.objects.create(
id = 1,
name = '대한민국'
)
Language.objects.create(
id = 1,
language = '한국어'
)
Account.objects.create(
id = 1,
name = 'kim',
gender = Gender.objects.get(id=1),
region = Region.objects.get(id=1),
language = Language.objects.get(id=1),
social_platform = SocialPlatform.objects.get(id=1),
follower_number = 12
)
Board.objects.create(
id = 1,
name = 'board1',
account = Account.objects.get(id=1)
)
Pin.objects.create(
id = 1,
internal_account = Account.objects.get(id=1),
external_account = Account.objects.get(id=1),
image_url = 'https://i.pinimg.com/44/48/a7/11118e7efc90286a8dff112211dea9750.jpg',
title = 'hello',
detail = 'hi',
link = 'https://twitter.com/',
)
BoardPin.objects.create(
id = 1,
board = Board.objects.get(id=1),
pin = Pin.objects.get(id=1)
)
def tearDown(self):
Account.objects.all().delete()
Board.objects.all().delete()
Pin.objects.all().delete()
Gender.objects.all().delete()
Region.objects.all().delete()
Language.objects.all().delete()
BoardPin.objects.all().delete()
def test_pindetail_get_success(self):
client = Client()
response = client.get('/boardpin/pin?pin_id=1', content_type = 'application/json')
self.assertEqual(response.json(),{
'pin' : [{
'internalAccount' : 'kim',
'externalAccount' : 'kim',
'imgUrl' : 'https://i.pinimg.com/44/48/a7/11118e7efc90286a8dff112211dea9750.jpg',
'title' : 'hello',
'detail' : 'hi',
'link' : 'https://twitter.com/',
'boardName' : 'board1',
'followNumber' : 12
}]
}
)
self.assertEqual(response.status_code, 200)
def test_pindetail_get_not_found(self):
client = Client()
response = client.get('/boardpin/pin?pin_id=200', content_type = 'application/json')
self.assertEqual(response.json(),{'message' : 'NO_PIN'})
self.assertEqual(response.status_code, 400)
def test_pindetail_get_keyerror(self):
client = Client()
response = client.get('/boardpin/pi', content_type = 'application/json')
self.assertEqual(response.status_code, 404)