TIL 36. Unit test란?

윤현묵·2021년 9월 18일
0

Django

목록 보기
12/17
post-thumbnail

Unit test란?

작성한 코드의 가장 작은 단위인 함수를 테스트 하는 메소드이며, 작성한 로직을 테스트하는 유닛테스트 코드를 작성하여 테스트

test의 중요성

사전에 test를 통해 문제가 생기지 않게 방지하는 과정(배포 이후 문제가 자주 발생하면 안됨)

Test 자동화의 중요성

Manual Test : 테스트 실행속도 ↓, 인력소모 ↑, 불안정성 ↑, 비용 ↑

시스템 테스트 3가지 방법

-. E2E(End-To-End test) 10%(비중) : UI test tools - cypress. 실행하기는 쉽지만 비용이 많이 들고 부정확하며 실행 시간이 오래걸림.
-. Integrating testing 20%(비중) : Local server start Client tools: postman, httpie. 그 다음으로 공수가 많이 들어감/
-. Unit testing 70%(비중) : 시스템 test가 이닌 코드를 직접 test한다는 느낌! 가장 쉬우며 가장 효과가 좋음.
→ 테스트 할 수 있는 가장 작은 단위를 테스트 하는 코드를 작성해서 테스트 하는 것을 말함

Unit test 용어

TestCase: unittest Framework의 테스트 조직의 기본 단위
Fixture: 테스트를 진행할 때 필요한 테스트용 데이터 혹은 설정 등을 이야기한다. 주로 테스트가 실행되기
Assertion: unittest에서 테스트하는 부분이 제대로 되었는지를 확인하는 부분

Unit test 설계 원칙

  1. 테스트 유닛은 각 기능의 가장 작은 단위에 집중
  2. 각 테스트 유닛은 반드시 독립적이어야
  3. 테스트가 빠르게 돌 수 있도록 만들기 위해 노력
  4. 지금 사용하고 있는 툴이 개별 테스트나 테스트 케이스를 어떻게 수행하는지 배워야 함
  5. 그날의 코딩을 시작하기 전에 항상 풀 테스트 슈트를 돌려야 함
  6. 모두가 공유하는 저장소에다가 코드를 집어넣기 전에 자동으로 모든 테스트를 수행하도록 훅을 구현
  7. 코드를 디버깅할 때 가장 먼저 시작할 일은 버그를 찝어내는 새로운 테스트를 작성하는 것
  8. 테스트 함수에는 길고 서술적인 이름을 사용해야 함
  9. 테스트 코드의 또다른 사용 방법은 새로운 개발자들을 위한 안내서로 쓰는 방법

Unit Test 개발 가이드

Python의 unittest 모듈을 사용하여 유닛 테스트를 개발할때 일반적으로 다음과 같은 절차를 따릅니다.

  • 먼저 unittest 모듈을 import 합니다.
    import unittest

  • unittest.TestCase 클래스를 상속하는 테스트 클래스를 만듭니다.
    class MyCalcTest(unittest.TestCase):

  • 테스트 클래스 안에 test_ 로 시작하는 테스트 메서드를 생성합니다.
    def test_add(self):

  • 테스드 메서드에서는 일반적으로 테스트하고자 하는 함수나 메서드를 호출하고 그 결과값을 self.assert*() 메서드를 사용하여 확인합니다. (assertEqual, assertTrue, assertFalse, assertRaises, assertRegex 등 다양한 assert 메서들을 사용 가능)

    def test_add(self):
    c = myCalc.add(70, 10)
    self.assertEqual(c, 80)

  • 테스트 클래스가 완성되었으면, unittest.main()을 호출하여 테스트를 실행합니다.

profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글