본문 바로가기
프로그래밍/Python

[TDD][Python] 단위 테스팅이란

by 우주를놀라게하자 2022. 3. 16.
반응형
SMALL
단위 테스팅(Unit testing)
개발자가 수행하는 가장 기본적인 테스팅 유형이다. 단위 테스트는 예상되는 결과에 테스트 중인 단위 기능의 결과를 검사할 수 있는 어써션(assertion)을 사용한다. 소프트웨어 코드의 가장 기본 단위(일반적으로 함수나 클래스의 메소드)에 적용된다.

파이썬에서 단위 테스팅 자원은 표준 라이브러리인 unittest 모듈에 의해 제공된다.

import unittest

# 바로 단위 테스트 작성

 

unittest 모듈 제공 객체

  • 테스트 케이스(Test cases): unittest 모듈은 테스트 케이스를 지원하는 TestCase 클래스를 제공한다. TestCase 클래스를 상속해 새로운 테스트 클래스와 테스트 메소드를 설정할 수 있다. 즉, 각 테스트 메소드는 예상되는 결과의 응답을 검사하는 단위 테스트를 구현한다.
  • 테스트 픽스처(Test fixtures): 테스트 픽스처는 하나 이상의 테스르에 대한 클린업 작업을 위한 설정 or 준비 사항을 의미한다. unittest 모듈에서 픽스처에 대한 자원은 TestCase 클래스와 연관 클래스의 setUp(), tearDown() 메소드와 TestSuite 클래스 모듈의 메소드에 의해 제공된다.
  • 테스트 스위트(Test suites): 테스트 스위트는 관련 테스트 케이스들의 집합이며 소프트웨어 시스템에 유사한 기능을 테스트하는 테스트 케이스들을 그룹으로 만들 수 있도록 해 테스트의 결과들을 함께 읽거나 분석할 수 있게 한다.unittest 모듈은 TestSuite 클래스를 통해 테스트 스위트를 지원한다.
  • 테스트 러너(Test runners): 테스트 러너는 테스트 케이스를 관리하고 실행한느 객체로 테스터에게 결과를 준다.
  • 테스트 결과(Test results): 테스트 결과 클래스들은 테스트 결과를 테스터에게 보여준다. 테스트 결과는 성공, 실패, 오류가 있는 테스트 케이스 개수를 요약한다.unittest 모듈에세 테스트 결과는 TextTestResult 클래스의 기본 구현으로 구체적인 내용을 갖는 TestResult 클래스로 구현한다.

📃 예제 소스 코드(MathTest.py)

from unittest import TestCase

class MathTest(TestCase):
	# 반드시 테스트 메서드의 이름은 test로 시작되어야한다.
    # 그래야 테스트를 실행할 때 해당 메서드가 누락되지 않고 정확히 테스트 케이스로 인식한다.
	def test_sum_nums(self):
    		self.assertEqual(1+2,3)

📃 테스트 코드 실행

작성한 테스트는 터미널에서 간단하게 실행해볼 수 있습니다.

$ python -m unittest MathTest.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

 

📃 테스트 코드 실행 실패

from unittest import TestCase

class MathTest(TestCase):
	# 반드시 테스트 메서드의 이름은 test로 시작되어야한다.
    # 그래야 테스트를 실행할 때 해당 메서드가 누락되지 않고 정확히 테스트 케이스로 인식한다.
	def test_sum_nums(self):
    		self.assertEqual(1+2,5)

다시 테스트를 실행해보면 테스트가 실패했다고 피드백을 줍니다.

$ python -m unittest MathTest.py
F
======================================================================
FAIL: test_one_plus_two (MathTest.MathTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/TDD/MathTest.py", line 6, in test_one_plus_two
    self.assertEqual(1 + 2, 5)
AssertionError: 3 != 5

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

 

다음 글에선 실제로 좀더 구체적인 예제로 TDD를 작성해보겠다.

반응형
LIST