기초
TDD (Test Driven Development) 또는 Test Case를 작성하기 위한 파이썬 내장 모듈입니다.
unittest.TestCase를 상속받아 Custom Test Class를 정의합니다.
test_
로 시작하는 함수를 정의하면 unittest가 실행되면서 해당 함수를 테스트합니다.
예제
import unittest
def add_two_numbers(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_numbers_3_4(self):
# 3+4 must be 7
self.assertEqual(add_two_numbers(3, 4), 7)
def test_numbers_0_0(self):
# 0+0 must be 0
self.assertEqual(add_two_numbers(0, 0), 0)
if __name__ == '__main__':
unittest.main()
위의 코드를 실행하면 다음과 같은 결과가 나옵니다.
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
assertEqual
외에도 assertNotEqual
, assertTrue
등 assert 메소드가 있습니다. (여기를 참고)
Fixture
Fixture란 테스트가 수행되기 이전에 준비과정 혹은 테스트가 종료된 이후에 클린업하는 과정을 의미합니다. 예를 들어, 테스트를 위한 임시 데이터 베이스나 폴더를 생성하고 테스트가 끝난후에 이들을 정리하는 등의 일입니다.
setUp()
- 각 테스트 메소드를 호출하기 이전에 호출되는 메소드입니다. 테스트 케이스가 실행될 때 마다 사용됩니다.
tearDown()
- 각 테스트가 끝난 이후에 호출되는 메소드입니다. 테스트 과정에서 exception이 발생해도 실행됩니다.
setUp
메소드가 성공했을 경우에만 호출됩니다.
- 각 테스트가 끝난 이후에 호출되는 메소드입니다. 테스트 과정에서 exception이 발생해도 실행됩니다.
setUpClass()
- 해당 테스트 클래스가 시작되기 이전 단 한번 호출되는 메소드입니다.
setUp
메소드는 각 테스트 메소드 이전에 항상 호출 됩니다. 메소드에@classmethod
라는 데코레이터를 달아줘야하고 메소드 인자로cls
를 넘겨줘야합니다.
- 해당 테스트 클래스가 시작되기 이전 단 한번 호출되는 메소드입니다.
tearDownClass()
- 해당 테스트 클래스가 종료된 이후 단 한번 호출되는 메소드입니다.
tearDown
메소드는 각 테스트 메소드가 끝난 이후 항상 호출됩니다. 메소드에@classmethod
라는 데코레이터를 달아줘야하고 메소드 인자로cls
를 넘겨줘야합니다.
- 해당 테스트 클래스가 종료된 이후 단 한번 호출되는 메소드입니다.
예제
import unittest
def remove_blank(text):
return text.replace(' ', '')
def remove_new_line(text):
return text.replace('\n', '')
def add_semicolon(text):
return text + ';'
class TestFixture(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('setUpClass')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def setUp(self):
print('setUp')
def tearDown(self):
print('tearDown')
def test_remove_blank(self):
text = "Hi, I'm SJ Quant"
removed = remove_blank(text)
self.assertNotIn(' ', removed)
def test_remove_new_line(self):
text = "Hi, I'm SJ Quant\nNice to meet you."
removed = remove_new_line(text)
self.assertNotIn('\n', removed)
def test_add_semicolon(self):
text = "console.log('Hello, World')"
added = add_semicolon(text)
self.assertEqual(added, "console.log('Hello, World');")
if __name__ == '__main__':
unittest.main()
아래의 코드를 실행하면 다음과 같은 결과가 나옵니다.
setUpClass
setUp
tearDown
.setUp
tearDown
.setUp
tearDown
.tearDownClass
----------------------------------------------------------------------Ran 3 tests in 0.005s
OK
setUpClass
와 tearDownClass
메소드는 각각 시작과 끝에 한 번씩 실행되었고, setUp
과 tearDown
메소드는 테스트 메소드 개수와 동일하게 3번씩 실행 된 것을 확인 할 수 있습니다.
참조 사이트
파이썬 - 기본을 갈고 닦자! - https://wikidocs.net/16107
조대협의 블로그 - http://bcho.tistory.com/tag/%EB%8B%A8%EC%9C%84%20%ED%85%8C%EC%8A%A4%ED%8A%B8
Python Documentation - https://docs.python.org/3/library/unittest.html#module-unittest
'개발 > 파이썬' 카테고리의 다른 글
파이썬과 비동기 프로그래밍 #3, 파이썬에서 비동기 프로그래밍 활용하기 (14) | 2019.03.01 |
---|---|
파이썬과 비동기 프로그래밍 #2, 파이썬에서 비동기 프로그래밍 시작하기 (0) | 2019.03.01 |
파이썬과 비동기 프로그래밍 #1, 비동기 프로그래밍이란 (0) | 2019.03.01 |
파이썬의 컨텍스트 매니저 (Context Manager) 에 대해 알아봅시다. (4) | 2019.03.01 |
ANACONDA 자주쓰는 명령어 정리 (0) | 2019.02.17 |