TIL31 unit Test 로직 및 터미널 보기

15939 단어 TILTIL

세션을 듣고 직접 유닛테스트를 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      = '[email protected]',
            image      = 'kskejsldadlwe',
            is_deleted = 0,
            identifier = 1
        )  
        position=Position.objects.create(
            id   = 1,
            name ='백엔드')

        seller_Info=SellerInfo.objects.create(
            email        = '[email protected]',
            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"     : "[email protected]",
            "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"     : "[email protected]",
            "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개만들었기때문에 로직대로 구현되면
아래와 같이 뜬다.


유닛테스트 하고나니 테스트하는 업무도 상당히 흥미롭다. 흥미롭기까지 과정이 고난했지만 기쁘다.

좋은 웹페이지 즐겨찾기