<aside>
🧐 일부 내용은 중급자를 위한 Python
의 확장입니다. 혹시 중급자를 위한 Python 영상이 궁금하시다면 아래 플레이리스트 확인해주세요.
</aside>
unittest — Unit testing framework
단위 테스트(unit test)는 개별 함수나 메서드와 같은 코드의 가장 작은 단위가 예상대로 동작하는지 검증하는 테스트입니다. Python에서는 unittest
모듈을 이용해 단위 테스트를 작성하고 실행할 수 있습니다.
표준라이브러리는 아니지만 nose2, pytest와 같은 패키지를 사용하기도 합니다. 함께 사용하는 모듈로는 coverage(보고서 형태)가 있습니다.
<aside> 🧐 해당 코드는 colab에서는 작동하지 않습니다. test.py로 만들어 실습하세요.
</aside>
import unittest
def add(x, y):
return x + y
class TestAdd(unittest.TestCase):
def test_add(self):
self.assertEqual(add(1, 2), 3)
if __name__ == '__main__':
unittest.main()
다음은 애러가 없을 경우 출력하는 화면입니다.
다음은 애러가 있을 경우 출력하는 화면입니다. 애러가 여러개 도출이 되었어도 애러는 1개만 출력합니다.
import unittest
def add(x, y):
return x + y
class TestAdd(unittest.TestCase):
def test_add(self):
self.assertEqual(add(1, 2), 3)
self.assertEqual(add(10, 2), 13)
self.assertEqual(add(10, 20), 31)
if __name__ == '__main__':
unittest.main()
아래와 같은 다양한 메서드를 제공합니다. 이는 뒤에 있는 Django에서도 많이 사용하니 메모해두세요.
import unittest
class TestAdd(unittest.TestCase):
def test_add(self):
print(dir(self)) # 이걸로 어떤 메서드가 있는지 한 번 쭉 눈으로 확인해보세요.
self.assertEqual(1 + 2, 3) # 같은지 판별
self.assertTrue(10 == 10) # True인지 판별
self.assertFalse(1 == 10) # False인지 판별
self.assertGreater(10, 1) # 앞에 것이 뒤에 것보다 큰지
self.assertLess(1, 10) # 앞에 것이 뒤에 것보다 작은지
self.assertIn(1, [1, 2, 3, 4, 5]) # 포함하고 있는지
self.assertIsInstance('a', str) # 인스턴스인지
if __name__ == '__main__':
unittest.main()
아래와 같이 여러가지 함수를 만들어 작동시켜볼 수 있습니다. 메서드 이름은 꼭 test
로 시작해야 합니다. 함수 이름 순으로 실행합니다. 구현순서와는 상관 없습니다.
import unittest
# 우리가 구현한 코드
def add(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
# 테스트 코드
class TestAdd(unittest.TestCase):
def test_add(self):
print('더하기 테스트')
self.assertEqual(add(1, 2), 3)
def test_sub(self):
print('빼기 테스트')
self.assertEqual(sub(3, 1), 2)
def test_mul(self):
print('곱하기 테스트')
self.assertEqual(mul(3, 4), 12)
def hojun(self):
'''
테스트 이름을 마음대로 정할 수 있는지 체크
'test_'로 시작하지 않으면 테스트로 인식하지 않는다.
'''
self.assertEqual(5, 4)
def test_hojun(self):
'''
테스트 이름을 마음대로 정할 수 있는지 체크
'''
self.assertEqual(5, 5)
if __name__ == '__main__':
unittest.main()
테스트 주도 개발(Test-Driven Development, TDD)은 코드를 작성하기 전 테스트를 먼저 작성하고 그 테스트를 통과하도록 코드를 구현하는 개발 방법론입니다. 이를 통해 코드의 품질을 향상시키고, 버그를 줄이며, 빠르게 배포 할 수 있습니다.