티스토리 뷰
[doctest]
고품질의 소프트웨어를 개발하는 한 가지 접근법은 개발되는 각 함수에 대한 테스트를 작성하고, 그것들을 개발 프로세스 중에 자주 실행하는 것입니다.
doctest 모듈은 모듈을 훑어보고 프로그램의 독스트링들에 내장된 테스트들을 검사하는 도구를 제공합니다.
테스트 만들기는 평범한 호출을 그 결과와 함께 독스트링으로 복사해서 붙여넣기를 하는 수준으로 간단해집니다.
사용자에게 예제를 함께 제공해서 설명서를 개선하고, doctest 모듈이 설명서에서 코드가 여전히 사실인지 확인하도록 합니다.
>>> print(average([21, 30, 70])) 의 결과값이 40.0 이 아니면 오류 메세지를 출력한다.
결과값 40.0 은 맨 마지막줄에 와야 한다.
>>> 뒤에 인풋에 대한 코드를 삽입할수 있다.
함수 밖에 글로벌 함수를 인자로 받을 수 있다.
a = 21
def average(values):
"""
:param values:
:return:
>>> global a
>>> print(average([a, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod()
[py.test]
https://python-guide-kr.readthedocs.io/ko/latest/writing/tests.html
[unittest]
TDD (Test Driven Development)를 하기 위한 파이썬 표준 라이브러리이다.
unittest.TestCase를 상속받아 Custom Test Class를 정의한다.
test_
로 시작하는 함수를 정의하면 unittest가 실행되면서 해당 함수를 테스트한다.
[TestCase.assert ]
1) assertEqual(A, B, Msg) - A, B가 같은지 테스트
2) assertNotEqual(A, B, Msg) - A, B가 다른지 테스트
3) assertTrue(A, Msg) - A가 True인지 테스트
4) assertFalse(A, Msg) - A가 False인지 테스트
5) assertIs(A, B, Msg) - A, B가 동일한 객체인지 테스트
6) assertIsNot(A, B, Msg) - A, B가 동일하지 않는 객체인지 테스트
7) assertIsNone(A, Msg) - A가 None인지 테스트
8) assertIsNotNone(A, Msg) - A가 Not None인지 테스트
9) assertRaises(ZeroDivisionError, myCalc.add, 4, 0) - 특정 에러 확인
import unittest
def is_prime(n):
return not bool([i for i in range(2, n) if not n % i])
def count_prime(n):
return len([i for i in range(2, n+1) if is_prime(i)])
class Test(unittest.TestCase):
def test_prime(self):
self.assertEqual(count_prime(10), 4)
if __name__ == '__main__':
unittest.main()
[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):
@staticmethod
def setUpClass():
print('setUpClass')
@staticmethod
def tearDownClass():
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()
'python lecture > basic' 카테고리의 다른 글
[edu] EAFP VS LBYL (허락보다 용서구하는 것이 쉽다) (0) | 2019.02.22 |
---|---|
[edu] 모듈 만들기 (create module) (0) | 2019.02.21 |
pycharm and inteli j 단축키 (0) | 2019.02.15 |
[edu] 숫자값에 _ 사용 (3.6 추가기능) (0) | 2019.02.12 |
[edu] f string (f 문자열 포메팅) (0) | 2019.02.12 |
- Total
- Today
- Yesterday
- 파이썬
- 문서 비교
- 장고 플러스친구 자동응답
- Python
- 파이썬 강좌
- wsgi
- gitlab
- 모바일 테마 적용
- 면접답변
- GIT
- 플러스친구 자동응답
- 장고
- 파이썬 입문
- 파이썬 프로그래밍
- virtualenv
- 엑셀 비교
- django
- 면접정답
- gitignore
- chatbot
- 문과 코딩
- django chatbot
- pycrypto
- 모바일 스킨 적용
- Tistory
- PuTTYGen
- 장고 카톡 자동응답
- admin.py
- 이미지 비교
- 파이썬 독학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |