오늘은 파이썬의 기본 라이브러리인 unittest 라이브러리에 대해 알아보고자 합니다.
- Unit test란?
- 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는 지 검증하는 절차
- 모든 함수 혹은 메소드에 대해 테스트 케이스를 작성하는 절차
- 각각의 테스트 케이스는 분리가 되어 있어야 함
간단한 코드라면 unit test를 진행할 필요가 없겠지만 복잡한 코드의 경우에 다양한 기능이 있을 것입니다.
이럴 때 복잡한 코드 내부에 다양한 기능 혹은 함수들을 하나씩 검증하기 위해서 사용하는 기능입니다.
unittest 라이브러리에서 제공하는 간단한 몇가지 기본적인 기능은 다음과 같습니다.
공식 문서는 아래의 링크에서 살펴보시기 바랍니다.
공식 문서의 기재된 내용을 바탕으로 설명한 글입니다.
https://docs.python.org/ko/3/library/unittest.html
unittest — 단위 테스트 프레임워크 — Python 3.10.4 문서
unittest — 단위 테스트 프레임워크 소스 코드: Lib/unittest/__init__.py (당신이 이미 테스트 기본 개념에 친숙하다면, assert 메서드 목록으로 건너뛰어도 좋습니다.) unittest 단위 테스트 프레임워크는
docs.python.org
- 기본 Assert 종류
assertEqual(a,b)
|
=>
|
a==b
|
assertNotEqual(a,b)
|
=>
|
a!=b
|
assertTrue(x)
|
=>
|
bool(x) is True
|
assertFalse(x)
|
=>
|
bool(x) is False
|
assertIs(a,b)
|
=>
|
a is b
|
assertIsNot(a,b)
|
=>
|
a is not b
|
assertIsNone(x)
|
=>
|
x is None
|
assertIsNotNone(x)
|
=>
|
x is not None
|
assertIn(a,b)
|
=>
|
a in b
|
assertNotIn(a,b)
|
=>
|
a not in b
|
assertIsInstance(a,b)
|
=>
|
isinstance(a,b)
|
assertNotIsInstance(a,b)
|
=>
|
not isinstance(a,b)
|
- 구체적인 Assert 종류
assertAlmostEqual(a,b)
|
=>
|
Round(a-b,7)==0
|
assertNotAlmostEqual(a,b)
|
=>
|
round(a-b,7)!=0
|
assertGreater(a,b)
|
=>
|
a > b
|
assertGreaterEqual(a,b)
|
=>
|
a >= b
|
assertLess(a,b)
|
=>
|
a < b
|
assertLessEqual(a,b)
|
=>
|
a <= b
|
assertRegex(s, r)
|
=>
|
r.search(s)
|
assertNotRegex(s, r)
|
=>
|
not r.search(s)
|
assertCountEqual(a.b)
|
=>
|
순서와 상관없이 a와 b가 같은 개수의 같은 요소를 가졌는지
|
일반적으로 pycharm에서 파이썬 스크립트 파일을 run 시키면 pycharm 하단의 커멘드 창만 활성화 되면서 print 결과물만 표시가 되었었습니다.
하지만 unittest를 사용하게 되면 unittest에 대한 결과를 함께 출력하게 됩니다.
위와 같이 언제 테스트를 시작했는지, 얼마나 걸렸는지 테스트를 몇번 했는지 제대로 동작했는지 등 다양한 정보를 표시해 줍니다.
또한 스트립트 파일의 테스트 내용을 전부 실행시키는 것이 아닌 독립적으로 실행이 가능합니다.
테스트 함수를 작성했다면 왼쪽에 이러한 run 아이콘이 생성된 것을 볼 수 있을 것입니다.
이 버튼은 테스트 경우에 따라 하나씩 생성이 되며 각각 독립적으로 실행이 가능합니다.
이제부터 코드로 살펴보도록 하겠습니다.
이전에 setup이라는 함수를 통해서 테스트 하기 전 초기화 하고 싶은 내용에 대해서 선언을 미리할 수 있습니다.
저는 간단하게 두 변수를 비교하기 위해서 다음과 같이 setUp을 구성했습니다.
def setUp(self):
self.a = 0
self.b = 0
assertEqual(a,b)을 통해서 두 변수의 값이 실제로 같은지 확인해 보도록 하겠습니다.
def test_is_equal(self):
self.assertEqual(self.a,self.b)
print("a와 b는 같다.")
위와 같이 a와 b는 값이 같기 때문에 문제가 없이 실행되고 "a와 b는 같다."라는 출력 문구도 확인이 되었습니다.
b에 값을 1 더해주는 함수를 작성해 보도록 하죠.
def plus_one(self, x):
x = x + 1
return x
이후 테스트 코드에 함수를 추가합니다.
def test_is_equal(self):
self.b = self.plus_one(self.b)
self.assertEqual(self.a,self.b)
print("a와 b는 같다.")
이러면 결과는 어떻게 될까요?
보시는 바와 같이 값이 다르다고 출력이 됩니다.
링크를 클릭하게 되면 값이 예상된 것이 몇이고 어떻게 다르게 출력됐는지에 대한 상세한 설명까지 출력이 됩니다.
구현된 함수에 대해서 테스트하고 싶을 때 이 기능을 사용한다면 꽤나 유용한 것 같습니다.
여기까지 작성된 코드는 다음과 같습니다.
import unittest
class simple_unit_test(unittest.TestCase):
def setUp(self):
self.a = 0
self.b = 0
def plus_one(self, x):
x = x + 1
return x
def test_is_equal(self):
#self.b = self.plus_one(self.b)
self.assertEqual(self.a,self.b)
print("a와 b는 같다.")
본 포스트에서는 assertEqual 함수만 사용했으면 이외에 다양한 unittest 함수들이 많습니다.
함수 테스트에 필요한 unittest를 사용하여 작성된 함수에 대해 검증할 수 있었으면 좋겠습니다.
'Python3 관련' 카테고리의 다른 글
[Python3] 파이썬 데코레이터, @ 의미, @ 사용법 (0) | 2022.07.31 |
---|---|
[python3] dictionary를 함수의 인자로 넘기기 (0) | 2022.02.27 |
[Python3] python3에서 .json 파일 다루기 - 하이퍼파라메타 저장 (0) | 2022.02.21 |
파이썬에서 Matplotlib를 사용해 gif 파일 만들기! (0) | 2022.02.01 |
python csv 처리, 파일 저장 - 파이썬에서 엑셀 데이터 처리! (0) | 2022.01.21 |