Python Unittest 원리 및 기본 사용 방법

5313 단어 PythonUnittest
기본 사용 단계:
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)
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기