[Django] Test Driven Development, TDD

[Django] Test driven development, TDD

테스트 주도 개발은 무언가를 개발할 때 바로 개발부터 하는 것이 아니라 개발하려는 항목에 대한 점검 사항을 테스트코드로 만들고 그 테스트를 통과시키는 방식으로 개발을 진행하는 방법입니다.

프로그램이 복잡해 질수록 추가한 기능 사이에 상호 연관성이 점점 늘어납니다.
나중에는 개발한 내용을 확인하는 과정을 건너뛰는 지경에 이를 수도 있죠.
그렇게 쌓이다 보면 문제가 발생했을 때 어디서부터 찾아야할지 막막해질 수 있습니다.

개발을 한 단계씩 진행할 때마다 테스트를 하면 이런 상황을 막을 수 있습니다.
테스트 주도 개발은 개발한 코드가 테스트를 만족하는지 자동으로 확인하면서 개발할 수 있도록 하는 방법입니다.

  1. 테스트 코드 작성 : 만들고 싶은 기능을 점검할 코드를 먼저 작성합니다.
  2. 기능 구현 : 테스트 코드를 만족시킬 수 있도록 기능을 구현합니다.
  3. 리팩토링 : 기능의 성능을 향상시키거나, 재사용성이 좋거나, 가독성이 좋은 코드가 되도록 개선합니다.

이 과정으로 개발을 한다면 개발 이후, 리팩토링 이후에도 테스트를 수동으로 하는 귀찮음을 덜 수 있습니다.
개발자의 가장 큰 매력은 귀찮음을 자동화하는 데에 있다고 생각합니다.
이 관점에서 테스트 주도 개발은 재미있는 작업이 될 수 있을 것 같습니다.

Django TDD

장고는 startapp 으로 만든 각각의 기능단위내에 test.py 를 수정하여 TDD를 가능하도록 지원합니다.

Django Class/Method

  • Client Class

    • Django의 View 레벨에서의 코드와 상호작용하는 시뮬레이션용 클라이언트 클래스입니다.

    • Client() 객체를 만들어 테스트를 하도록 구현합니다.

    • Simulate GET / POST requests on a URL

        from django.test import Client
        client = Client()
        response = client.get('/blog/')
        print(response.response_status)
        print(response.content)
    • 위의 코드에서 response.response_status 는 http 응답 status code 를 의미합니다. (200은 정상)

  • assert Method

    • 값이 무엇인지를 테스트하는 메서드입니다.
    • assertTrue
    • assertFalse
    • assertIn
    • assertNotIn