Python Unittest 원리 및 기본 사용 방법
1、import unittest
2. 새 클래스 계승 유닛st.TestCase
3. 테스트로 시작하는 함수를 테스트 용례로 정의한다. [테스트로 시작해야 한다.]
4. 테스트 용례를 실행하기 전에 Setup 함수 [테스트 용례마다 한 번 호출] 또는 setup Class 함수 [모든 테스트 용례는 한 번만 호출]
5. 테스트 용례를 실행한 후 모두 TearDown 함수[여러 번]과 TearDownClass 함수[단 한 번]를 호출한다
PS:
1、init를 다시 쓸 수 없음()
2. 함수는test로 시작해야만 테스트 용례로 사용할 수 있다
3. setupClass () 와 tearDownClass () 는 @classmethod로 수식해야 합니다
# -*- encoding=utf-8 -*-
import unittest
class Demo1(unittest.TestCase):
def setUp(self):
print ' setup '
@classmethod
def setUpClass(cls):
print ' setupClass '
def tearDown(self):
print ' tearDown '
@classmethod
def tearDownClass(cls):
print ' tearDownClass '
@staticmethod
def test_add():
print '3 + 5 = {}'.format(3 + 5)
@staticmethod
def test_sub():
print '3 - 5 = {}'.format(3 - 5)
if __name__ == '__main__':
unittest.main()
실행 결과setupClass 함수 호출
setup 함수 호출
3 + 5 = 8
tearDown 함수 호출
setup 함수 호출
3 - 5 = -2
tearDown 함수 호출
tearDownClass 함수 호출
Ran 2 tests in 0.012s
OK
TestSuite [테스트 그룹] 테스트 용례 추가
# -*- encoding=utf-8 -*-
class Class1(object):
def __init__(self):
print ' Class1 '
self.name = ' '
self.age = ' '
def set_name(self, name):
self.name = name
def set_age(self, age):
self.age = age
def print_name(self):
print 'Class1 :{}'.format(self.name)
def print_age(self):
print 'Class1 :{}'.format(self.age)
if __name__ == '__main__':
pass
# -*- encoding=utf-8 -*-
import unittest
from Class1 import Class1
class CallClass1(unittest.TestCase):
def setUp(self):
self.class1 = Class1()
pass
def tearDown(self):
self.class1 = None
pass
def test_set_name(self):
self.class1.set_name(' ')
self.class1.print_name()
def test_print_name(self):
self.class1.print_name()
if __name__ == '__main__':
unittest.main()
# -*- encoding=utf-8 -*-
import unittest
from Test_Demo2 import CallClass1
if __name__ == '__main__':
testSuite = unittest.TestSuite()
testSuite.addTest(CallClass1('test_set_name'))
testSuite.addTests(
[CallClass1('test_set_name'), CallClass1('test_print_name')])
textTestRunner = unittest.TextTestRunner()
textTestRunner.run(testSuite)
실행 결과Class1 초기화 함수 호출
Class1 이름: 이름 설정
Class1 초기화 함수 호출
Class1 이름: 이름 설정
Class1 초기화 함수 호출
Class1 이름: 정의되지 않은 이름
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Process finished with exit code 0
테스트 기록 txt 파일에 보고
# -*- encoding=utf-8 -*-
import unittest
from Test_Demo2 import CallClass1
if __name__ == '__main__':
testSuite = unittest.TestSuite()
testSuite.addTest(CallClass1('test_set_name'))
testSuite.addTests(
[CallClass1('test_set_name'), CallClass1('test_print_name')])
# textTestRunner = unittest.TextTestRunner()
# textTestRunner.run(testSuite)
#
with open('UnittestTextReport.txt', 'w') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(testSuite)
테스트 기록 html 파일에 보고
# html
with open('HTMLReport.html', 'w') as f:
runner = HTMLTestRunner(stream=f,
title='MathFunc Test Report',
description='generated by HTMLTestRunner.',
verbosity=2
)
runner.run(suite)
단언단언이 진실일 때, 단언 후의 코드를 실행합니다. 예를 들어 (단언 후에 성공 알림 정보를 출력합니다.)
만약에 가짜라고 단언하면 이후의 코드는 실행되지 않고 오류 정보에 대응하며 이후의 알림 정보는 실행되지 않습니다.unittest에서 프롬프트 F, 실패, 이상을 포착하면 E, 오류를 나타냅니다.
보충: 가짜라고 단언하면 현재 함수 def, 실행을 멈추지만 실행 후의 def 함수
중점:try 문장 블록에서 assert를 사용하지 마십시오. assert가 가짜라고 단언할 때 이상을 던집니다. 테스트 용례는 실패합니다. 만약try에 넣으면 이상을 포착하고 테스트 용례는 영원히 통과로 표시됩니다.
단언 결과:
. 통과하다
F False, 단언 없음
Error, 프로그램 내부에 오류가 발생했음을 나타냅니다.
현재 디렉터리에 있는 모든 테스트 용례를 찾습니다. [기본적으로test로 시작하는py 파일은 스스로 설정할 수 있습니다.]
# -*- encoding=utf-8 -*-
import unittest
import os
if __name__ == '__main__':
loader = unittest.defaultTestLoader.discover(os.getcwd())
# tests = unittest.defaultTestLoader.discover(
# start_dir='.', # =>
# pattern='test*.py' # =>
# )
runner = unittest.TextTestRunner()
runner.run(loader)
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.