본문 바로가기
CS/Python

[Python unittest] Python 으로 Unit test 만드는 방법 1

by Warehaus 2021. 7. 20.

unittest

 

개요

현재 작업하는 프로젝트에서 python 테스트를 위해 unittest 를 적극 활용하고 있다.

이번에는 간단히 사용방법에 대해서만 정리하고, 작성하면서 겪는 문제점이나 고려해볼만한 사항들은 추후 지속적으로 정리할 예정이다.

자세한 사용 방법은 아래 URL을 참고해 봐도 좋을 것 같다.

https://docs.python.org/ko/3/library/unittest.html

 

unittest — 단위 테스트 프레임워크 — Python 3.9.6 문서

unittest — 단위 테스트 프레임워크 소스 코드: Lib/unittest/__init__.py (당신이 이미 테스트 기본 개념에 친숙하다면, assert 메서드 목록으로 건너뛰어도 좋습니다.) unittest 단위 테스트 프레임워크는

docs.python.org

 

unittest 시작하기

현재 구현하고 있는 Python 메서드들이 정상적으로 동작하는지, 특정 시나리오에서 만들어 진 input 에 따라 예상 된 output이 나오는지 테스트가 필요한 경우가 있다.  이럴 때, Python 에서 주로 사용되는 단위테스트 프레임워크인 unittest를 활용 해 볼 수 있는데, 나는 프로젝트 규모에 관계없이 unittest는 반드시 활용해 보는것을 추천하고 싶다.

아래는docs.python.org 에서 제공하는 unittest 의 기본 예시이며, 이 예시의 라인별로 설명을 적어보았다.

import unittest

class TestStringMethods(unittest.TestCase): // unittest.TestCase를 상속받는 클래스를 만든다.

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO') // 왼쪽 값과 오른쪽 같이 동일한지 테스트, 아니면 Fail

    def test_isupper(self):
        self.assertTrue('FOO'.isupper()) // 'FOO'.isupper() 가 True인지 확인
        self.assertFalse('Foo'.isupper())  // 'Foo'.isupper() 가 False인지 확인

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])  // s 를 split한 결과가 우측 값과 같은지 확인

if __name__ == '__main__':
    unittest.main() // main을 호출하면 위 클래스에서 test_ 로 시작하는 unittest들을 모두 실행해 준다.

 

프로젝트를 시작하는 단계에서 내가 만들어 낸 기능을 테스트 해 보고싶다면, 자신의 모듈을 import해서 테스트 해 보면 될 것이다.

사실 실제 프로젝트에서 테스트를 원활히 하는 것은 생각만큼 단순하지 않을 수 있다. 테스트를 위한 추가 모듈들도 개발이 되어야 할 것이고, 원하는 테스트만 선택적으로 돌릴 수 있도록 하는 테스트 runner가 필요할 수도 있을 것이다.

이런 부분에 대해서는 다음에 추가로 정리를 해 볼까 한다.