UnitTest 프레임 워크-어설 션

Python 테스트 프레임 워크는 특정 조건을 테스트하는 Python의 내장 assert () 함수를 사용합니다. 어설 션이 실패하면 AssertionError가 발생합니다. 그런 다음 테스트 프레임 워크는 테스트를 실패로 식별합니다. 다른 예외는 오류로 처리됩니다.

다음 세 세트의 주장 함수는 unittest 모듈에 정의되어 있습니다.

  • 기본 부울 어설 션
  • 비교 주장
  • 컬렉션에 대한 어설 션

기본 assert 함수는 작업 결과가 True인지 False인지 평가합니다. 모든 assert 메서드는msg 지정된 경우 실패시 오류 메시지로 사용되는 인수입니다.

Sr. 아니. 방법 및 설명
1

assertEqual(arg1, arg2, msg = None)

arg1arg2 가 같은지 테스트합니다 . 값이 같지 않으면 테스트가 실패합니다.

2

assertNotEqual(arg1, arg2, msg = None)

arg1arg2 가 같지 않은지 테스트합니다 . 값이 동일하게 비교되면 테스트가 실패합니다.

assertTrue(expr, msg = None)

expr 이 참 인지 테스트하십시오 . 거짓이면 테스트 실패

4

assertFalse(expr, msg = None)

expr 이 거짓 인지 테스트합니다 . 참이면 테스트가 실패합니다.

5

assertIs(arg1, arg2, msg = None)

arg1arg2 가 동일한 객체로 평가 되는지 테스트 합니다.

6

assertIsNot(arg1, arg2, msg = None)

arg1arg2 가 동일한 객체로 평가되지 않는지 테스트 합니다.

7

assertIsNone(expr, msg = None)

expr 이 None 인지 테스트합니다 . None이 아니면 테스트가 실패합니다.

8

assertIsNotNone(expr, msg = None)

expr 이 None이 아닌지 테스트합니다 . 없음이면 테스트가 실패합니다.

9

assertIn(arg1, arg2, msg = None)

arg1arg2에 있는지 테스트합니다 .

10

assertNotIn(arg1, arg2, msg = None)

arg1arg2에 없는지 테스트합니다 .

11

assertIsInstance(obj, cls, msg = None)

objcls 의 인스턴스인지 테스트

12

assertNotIsInstance(obj, cls, msg = None)

objcls 의 인스턴스가 아닌지 테스트

위의 주장 함수 중 일부는 다음 코드에서 구현됩니다.

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertEqual(4 + 5,9)
   def test2(self):
      self.assertNotEqual(5 * 2,10)
   def test3(self):
      self.assertTrue(4 + 5 == 9,"The result is False")
   def test4(self):
      self.assertTrue(4 + 5 == 10,"assertion fails")
   def test5(self):
      self.assertIn(3,[1,2,3])
   def test6(self):
      self.assertNotIn(3, range(5))

if __name__ == '__main__':
   unittest.main()

위의 스크립트가 실행되면 test2, test4 및 test6은 실패를 표시하고 다른 스크립트는 성공적으로 실행됩니다.

FAIL: test2 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 9, in test2
      self.assertNotEqual(5*2,10)
AssertionError: 10 == 10

FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 13, in test4
      self.assertTrue(4+5==10,"assertion fails")
AssertionError: assertion fails

FAIL: test6 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 17, in test6
      self.assertNotIn(3, range(5))
AssertionError: 3 unexpectedly found in [0, 1, 2, 3, 4]

----------------------------------------------------------------------            
Ran 6 tests in 0.001s                                                             
                                                                                  
FAILED (failures = 3)

두 번째 주장 기능 집합은 다음과 같습니다. comparative asserts −

  • assertAlmostEqual (첫 번째, 두 번째, 장소 = 7, msg = 없음, 델타 = 없음)

    차이를 계산하여 주어진 소수점 이하 자릿수 (기본값 7)로 반올림하여 첫 번째두 번째 가 대략 (또는 거의 같지 않은) 지 테스트합니다 .

  • assertNotAlmostEqual (첫 번째, 두 번째, 장소, 메시지, 델타)

    차이를 계산하고 주어진 소수 자릿수 (기본값 7)로 반올림하고 0과 비교하여 첫 번째와 두 번째가 거의 같지 않은지 테스트합니다.

    위의 두 함수에서 자리 대신 델타가 제공되는 경우 첫 번째와 두 번째의 차이는 델타보다 작거나 같아야합니다.

    델타와 장소를 모두 제공하면 TypeError가 발생합니다.

  • assertGreater (첫 번째, 두 번째, msg = 없음)

    메서드 이름에 따라 firstsecond 보다 큰지 테스트합니다 . 그렇지 않으면 테스트가 실패합니다.

  • assertGreaterEqual (첫 번째, 두 번째, msg = 없음)

    메서드 이름에 따라 firstsecond 보다 크거나 같은지 테스트합니다 . 그렇지 않으면 테스트가 실패합니다.

  • assertLess (첫 번째, 두 번째, msg = 없음)

    메서드 이름에 따라 firstsecond 보다 작은 지 테스트합니다 . 그렇지 않으면 테스트가 실패합니다.

  • assertLessEqual (첫 번째, 두 번째, msg = 없음)

    메서드 이름에 따라 firstsecond 보다 작거나 같은지 테스트합니다 . 그렇지 않으면 테스트가 실패합니다.

  • assertRegexpMatches (텍스트, 정규식, 메시지 = 없음)

    정규 표현식 검색이 텍스트와 일치하는지 테스트합니다. 실패한 경우 오류 메시지에 패턴과 텍스트가 포함됩니다. regexp는 정규식 객체 또는 다음에서 사용하기에 적합한 정규식을 포함하는 문자열 일 수 있습니다.re.search().

  • assertNotRegexpMatches (텍스트, 정규식, 메시지 = 없음)

    정규 표현식 검색이 텍스트 와 일치하지 않는지 확인 합니다 . 패턴 및 일치 하는 텍스트 부분을 ​​포함하는 오류 메시지와 함께 실패 합니다. regexp 는 정규 표현식 객체이거나 re.search () 에서 사용하기에 적합한 정규 표현식을 포함하는 문자열 일 수 있습니다 .

어설 션 함수는 다음 예제에서 구현됩니다.

import unittest
import math
import re

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertAlmostEqual(22.0/7,3.14)
   def test2(self):
      self.assertNotAlmostEqual(10.0/3,3)
   def test3(self):
      self.assertGreater(math.pi,3)
   def test4(self):
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")

if __name__ == '__main__':
   unittest.main()

위의 스크립트는 test1 및 test4를 실패로보고합니다. test1에서 22/7의 나눗셈은 3.14의 소수점 7 자리 이내가 아닙니다. 마찬가지로 두 번째 인수가 첫 번째 인수의 텍스트와 일치하므로 test4는 AssertionError를 발생시킵니다.

=====================================================FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 7, in test1
      self.assertAlmostEqual(22.0/7,3.14)
AssertionError: 3.142857142857143 != 3.14 within 7 places
================================================================
FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 13, in test4
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")
AssertionError: Regexp matched: 'Point' matches 'Point' in 'Tutorials Point (I)
Private Limited'
----------------------------------------------------------------------

Ran 4 tests in 0.001s                                                             
                                                                                  
FAILED (failures = 2)

컬렉션에 대한 주장

이 assert 함수 세트는 List, Tuple, Dictionary 및 Set과 같은 Python의 컬렉션 데이터 유형과 함께 사용됩니다.

Sr. 아니. 방법 및 설명
1

assertListEqual (list1, list2, msg = None)

두 목록이 같은지 테스트합니다. 그렇지 않은 경우 둘 사이의 차이점 만 보여주는 오류 메시지가 생성됩니다.

2

assertTupleEqual (tuple1, tuple2, msg = None)

두 개의 튜플이 같은지 테스트합니다. 그렇지 않은 경우 둘 사이의 차이점 만 보여주는 오류 메시지가 생성됩니다.

assertSetEqual (set1, set2, msg = None)

두 세트가 같은지 테스트합니다. 그렇지 않은 경우 세트 간의 차이점을 나열하는 오류 메시지가 구성됩니다.

4

assertDictEqual (expected, actual, msg = None)

두 사전이 같은지 테스트합니다. 그렇지 않은 경우 사전의 차이점을 보여주는 오류 메시지가 생성됩니다.

다음 예제는 위의 방법을 구현합니다-

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertListEqual([2,3,4], [1,2,3,4,5])
   def test2(self):
      self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
   def test3(self):
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})

if __name__ == '__main__':
   unittest.main()

위의 예에서 test1 및 test3은 AssertionError를 표시합니다. 오류 메시지는 목록 및 사전 개체의 차이점을 표시합니다.

FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 5, in test1
      self.assertListEqual([2,3,4], [1,2,3,4,5])
AssertionError: Lists differ: [2, 3, 4] != [1, 2, 3, 4, 5]

First differing element 0:
2
1

Second list contains 2 additional elements.
First extra element 3:
4

- [2, 3, 4]
+ [1, 2, 3, 4, 5]
? +++       +++

FAIL: test3 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 9, in test3
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})
AssertionError: {1: 11, 2: 22} != {1: 11, 2: 22, 3: 33}
- {1: 11, 2: 22}
+ {1: 11, 2: 22, 3: 33}
?              +++++++
                                                                                  
----------------------------------------------------------------------            
Ran 3 tests in 0.001s                                                             
                                                                                  
FAILED (failures = 2)