참고
컴공 수업을 들으면서,
신뢰할 수 있는 프로그램을 만드는 것이 중요하다는 걸 배웠다.
이를 위한 주요한 방법이 단위테스트인데,
안그래도 낯선 언어인 OCaml로 하자니 잘 손이 가지 않았다.
그래서 익숙한 언어인 파이썬으로 시작해보려고 한다!!
unittest 단위테스트
단위테스트는 모듈이나 개별 코드가 예상대로 작동하는지 확인하는 과정이다.
파이썬에서 내장 라이브러리인 unittest를 이용해서 단위테스트를 한다.
주요 개념
TestCase
테스트 조직의 기본 단위
Fixture
테스트 함수 전/후에 실행해서
테스트 환경이 예상된 것과 같은지 확인한다
assertion
unittest가 테스트를 통과하는지 실패하는지 결정한다.
bool, 객체 적합성, 예외 발생 등 다양한 것을 점검함
예제 1 - Hello World!
import unittest
class CustomTests(unittest.TestCase):
def test_runs(self):
custom_function()
if __name__ == '__main__':
unittest.main()
CustomTests라는 클래스에서 단위테스트의 기본 단위인 unittest.TestCase를 상속받는다.
클래스 내부에서 test_로 시작되게 이름을 지은 메소드는 테스트 메소드가 된다.
이 코드는 custom_function이라는 함수가 실행되는지를 테스트하고 있다.
E
======================================================================
ERROR: test_runs (__main__.CustonTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "c:\Users\enkee\OneDrive\바탕 화면\unitTest\unitTest.py", line 5, in test_runs
custom_function()
NameError: name 'custom_function' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
다른 곳에서 custom_function을 정의하지 않았으니 테스트 결과는 FAILED이다.
위 예제 1에 custom_function의 정의를 포함시켜보자.
def custom_function():
pass
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
위 코드를 실행했더니 이제는 OK 결과가 나온다 .
예제 2 - assertEqual
import unittest
import os
# 파일을 받아 파일 길이를 재는 함수
def custom_function(file_name):
with open(file_name, 'rt') as f:
return sum(1 for _ in f)
class CustonTests(unittest.TestCase):
def setUp(self):
self.file_name = 'test_file.txt'
with open(self.file_name, 'wt') as f:
f.write("""Hi~""".strip())
def tearDown(self):
try:
os.remove(self.file_name)
except:
pass
def test_runs(self):
custom_function(self.file_name)
def test_line_count(self):
self.assertEqual(custom_function(self.file_name),1)
if __name__ == '__main__':
unittest.main()
파일을 만들어서 파일 길이를 재는
custom_function 파일을 테스트한다.
test_rums 메소드에서는 함수가 실행되는지 여부를 판단하고,
test_line_count 메소드에서는 함수의 결과가 기대한 것과 같은지 체크한다.
unittest의 assert 메소드
assertEqual(a,b), assertNotEqual(a, b)
assertTrue(x), assertFalse(x)
assertIs(a,b), assertIsNot(a, b)
assertIsNone(x), assertIsNotNone(x)
등 다양함
'Computer Science > 프로그래밍언어' 카테고리의 다른 글
컴퓨터과학이 여는 세계(이광근, 2015) 노트 (0) | 2022.04.28 |
---|---|
람다 대수 Lambda Calculus란 무엇인가? (ft. Church Encodings) (0) | 2022.04.20 |
Wiki | Unit type (0) | 2022.04.03 |
참고 자료 | 함수형 언어로 imperative language interpreter 만들기 (0) | 2022.03.31 |
Data Structure | Zipper Tree (feat. 함수형 언어) (0) | 2022.03.25 |