Python unit testing framework
파이썬 unit testing 표준 라이브러리인 unittest에 대해 알아보자.
JUnit에서 영감을 얻었으며 다른 언어의 주 unit testing framework와 유사하다고 한다.
test automation과 setup, shutdown 공유, reporting framework 등을 지원한다.
자세히 알아보기전에 몇 가지 중요한 용어는 다음과 같다.
- test fixture : 테스트 수행하는데 필요한 준비 및 정리 작업을 지원함 (temporary or proxy databases, directories 등)
- test case : 테스트를 수행하고자 하는 각각의 unit test case
- test suite : test case의 모음, 여러 test cases를 한번에 실행할 때 사용됨
- test runner : 테스트 실행을 조율하고 user에게 결과(report)를 제공해줌
Script Sample (Ref. https://docs.python.org/3/library/unittest.html#module-unittest)
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
클래스 기반으로 작성해야 하며 unittest.TestCase를 상속받아서 스크립트를 구현해야 한다.
그리고 각 test case에 속하는 함수는 반드시 test로 시작해야 한다.
* 테스트 실행순서는 test 함수 이름순서대로 실행됨
Command-line Interface
아래처럼 unittest module을 이용해서 modules, classes, test method를 각각 실행할 수 있다.
Test Discover
Unittest는 한번에 여러 테스트를 수행하기 위해 simple test discover를 지원한다.
이를 위해선 모든 테스트 파일이 프로젝트 최상위 디렉토리에서 importable 해야한다.
참고로 discover를 빼도 같은 의미로 동작한다.
setUp & tearDown
setUp과 tearDown은 각 개별 testcase를 실행할 때 test fixture로 사용된다.
setUp, tearDown, __init__()은 각 테스트마다 호출된다.
따라서 setUp에는 주로 공통으로 시작하는 부분, 셋팅되어야 하는 부분을 작성하고, tearDown은 close와 같이 정리되는 작업을 작성한다.
호출되는 프로세스는 예를 들어 테스트 함수가 testcase1, testcase2가 있다면..
setUp -> testcase1 -> tearDown -> setUp -> testcase2 -> tearDown 순으로 호출된다.
TestSuite
위에서 언급한대로 test case들은 테스트 하는 기능에 따라 그룹화하는 것을 권장한다.
unittest framework에서는 아래와 같이 TestSuite 클래스를 이용할 수 있다.
def suite():
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase('test_default_widget_size'))
suite.addTest(WidgetTestCase('test_widget_resize'))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite())
Assert Method
Method | Description |
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) |
'Testing' 카테고리의 다른 글
파이썬 Selenium, unittest framework로 테스트 자동화하기 (0) | 2020.01.13 |
---|---|
SW Testing (소프트웨어 테스트 이론) (0) | 2020.01.11 |
파이썬 셀레니움(Selenium)으로 테스트 자동화 (0) | 2019.12.29 |