세션을 듣고 직접 유닛테스트를 test.py에 작성해보았다.
직접 Post 테스트 케이스를 만들어서 해보려고하닌 많은 어려움이 있었다.
처음에는 어떻게 작성해야할지 감을 잡지못해서 이거저거 해보면서 서서히 감을 잡게되었는데
작성할떄 models.py 필드잘참조해서 값을 만들어야하는것이 핵심이다. 여기서 조금 해매었다.
테스트케이스를 작성하기위해서는
from django.test import TestCase, Client
이와같이 import를 필히 해주어야 한다. 그런다음에 TestCase
를 사용할 곳에 상속받게해서 사용하게 해주면된다.
내가 작성한 성공 실패 오류에 관해서 각각 메소드를 만들어 줘야한다.
나는 TestCase 아래와같이 작성하였다.
import json
from django.test import TestCase, Client
from. models import Order
from users.models import Expert, Position, SellerInfo, User
from products.models import Category, Product
class OrderTest(TestCase):
def setUp(self):
category=Category.objects.create(
id = 1,
name ='python')
user=User.objects.create(
id = 1,
is_kakao = 1,
email = 'a@naver.com',
image = 'kskejsldadlwe',
is_deleted = 0,
identifier = 1
)
position=Position.objects.create(
id = 1,
name ='백엔드')
seller_Info=SellerInfo.objects.create(
email = 'a@naver.com',
address ='선릉대로427',
phone_number = 0
)
expert=Expert.objects.create(
id=1,
introduction = '@@@@@@@@@@@@@@@@@@@@@@@',
image = '#################',
created_at = 0,
name ='위코디션',
position = position,
seller_info = seller_Info,
user = user
)
Product.objects.create(
id = 1,
title = '파이썬 20년',
price = 4300,
sell_count = 1,
category = category,
expert = expert
)
def tearDown(self):
Category.objects.all().delete()
Expert.objects.all().delete()
Product.objects.all().delete()
User.objects.all().delete()
Order.objects.all().delete()
def test_orderview_post_invalid_product(self):
client = Client()
response = client.post('/orders',json.dumps({
"email" : "a@naver.com",
"product_id": 3000000,
"price" : 4300
}), content_type='application/json')
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(),{'message':'INVALID_PRODUCT'})
def test_orderview_post_success(self):
client = Client()
response = client.post('/orders',json.dumps({
"email" : "a@naver.com",
"product_id": 1,
"price" : 4300
}), content_type='application/json')
self.assertEqual(response.status_code, 201)
self.assertEqual(response.json(),{'message':'SUCCESS'})
def test_orderview_post_keyerror(self):
client = Client()
response = client.post('/orders',json.dumps({
"product_id": 1,
"price" : 4300
}), content_type='application/json')
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(),{'message':'KEY_ERROR'})
터미널에서 python manage.py test .
를 실행하면 함수메소드를 3개만들었기때문에 로직대로 구현되면
아래와 같이 뜬다.
유닛테스트 하고나니 테스트하는 업무도 상당히 흥미롭다. 흥미롭기까지 과정이 고난했지만 기쁘다.