테스트 코드의 작성은 한편으로 굉장히 크게 다가왔다.
아는 지인 개발자 분에게 들었는데, 아예 테스트 코드가 없으면
개발을 한 게 아니라고 본다고 하였다.

그렇다보니 스스로 테스트코드에 대해서 관심을 가졌으나,
직접 사용해보지 못하고 있었다.(물론 나의 학습 부족이 제일 컸다.)

앞으로는 이런 부분에 대해서 더 이상 미루지 않고
학습해서 부딪쳐보기로 하였다.

django에서 혹은 개발에서 테스트의 종류는 크게 3가지로 분류하고 있다.
참고 ( [Django 튜토리얼 파트 10: Django 웹 어플리케이션 테스트하기 - Web 개발 학습하기 | MDN](https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Testing))

  1. unit test(유닛테스트)
    1. 독립적인 class와 function 단위의 테스트
  2. Regression test(버그 수정 테스트)
    1. 발생하였던 버그에 대한 수정 테스트
  3. Integration test(통합테스트)
    1. 유닛 테스크를 완료한 각각의 독립적인 컴포넌트들이 함께 결합하여 수행하는 동작을 검증한다. 각 컴포넌트들의 내부적인 동작까지는 검증할 필요가 없다.
    2. 해석해보면 비즈니스 로직에 대한 검증인거 같다

구조 

app / tests /



__init__.py

test_models.py

test_forms.py

test_views.py

=> app아래에 tests라는 폴더를 만들고

해당 폴더 아래에 test관련된 파일들을 만든다.

 

실행

from django.test import TestCase



class YourTestClass(TestCase):

    @classmethod

    def setUpTestData(cls):

        print("setUpTestData: Run once to set up non-modified data             for all class methods.")

        pass


    def setUp(self):

        print("setUp: Run once for every test method to setup clean data.")

        pass

기본적으로 TestCase를 상속받아 만든 클래스는 2개의 메쏘드를 정의한다.

  • setUpTestData() 는 클래스 전체에서 사용되는 설정을 위해서 테스트 시작 때 딱 한 번만 실행됩니다. 테스트 메쏘드가 실행되면서 수정되거나 변경되지 않을 객체들을 이곳에서 생성할 수 있습니다.
  • setUp() 은 각각의 테스트 메쏘드가 실행될 때마다 실행됩니다. 테스트 중 내용이 변경될 수 있는 객체를 이곳에서 생성할 수 있습니다 (모든 테스트 메쏘드는 방금 막 생성된 ("fresh") 오브젝트를 입력받게 됩니다).

 

test코드 작성

from django.test import TestCase





class YourTestClass(TestCase):

    

    @classmethod

    def setUpTestData(cls):

        member = Member.objects.create(name='byeonguk')


    def test_name_label(self):

        first_member =Member.objects.get(name='byeonguk').first_name

        self.assertEquals(first_name, 'first name')


    def test_age_bigger_19(self):

        age = Member.objects.get(name='byeonguk').age

        check_age = age > 19

        self.assertTrue(check_age)

  • 체크해주는 함수
  • self.assertEquals => 생각한 값과 같은지 체크해주는 함수
  • self.assertTrue(True) => () 안의 값이 True인지 체크
  • self.assertFalse(False) => () 안의 값이 False인지 체크

 

test코드 실행

python3 manage.py test

 

test코드 더 많은 정보 출력하기

python3 manage.py test --verbosity 2
  • verbosity 는 기본적으로 1이며, 0,1,2,3으로 조절가능

 

test코드 일부만 실행하기

  • 테스트 중 일부만 실행하려면 패키지, 모듈, TestCase 서브클래스, 메서드의 전체 경로를 지정해주면 됩니다.
# Run the specified module

python3 manage.py test catalog.tests





# Run the specified module

python3 manage.py test catalog.tests.test_models





# Run the specified class

python3 manage.py test catalog.tests.test_models.YourTestClass





# Run the specified method

python3 manage.py test catalog.tests.test_models.YourTestClass.test_one_plus_one_equals_two

 

일단 어느정도 정리는 하였으니깐, 이제는 직접 작성해보면서 테스트를 해봐야겠다.

 

 

 

+ Recent posts