고급 사용자를 위한 Python Unittest - ohipark/btstack GitHub Wiki
참고문서
- Python Unittest 튜토리얼 | unittest 프레임워크를 사용한 Python에서의 단위 테스트
- unittest — Unit testing framework
- unittest.mock — getting started
- unittest.mock — mock object library
- [파이썬] 테스트 모킹 - unittest.mock
- Python testing in Visual Studio Code
- [파이썬] 단위 테스트의 시작 (unittest)
- doctest — Test interactive Python examples
- 파이썬에서의 테스트 주도 개발(TDD)과 단위 테스트
- Python에서 unittest를 사용하여 테스트를 실행하기 위한 일반적인 디렉토리 구조
-
파이썬 단위 테스트 함수
- assertLessEqual() 함수
- assertNotIn() 함수
- assertNotEqual() 함수
- assertTrue() 함수
- assertFalse() 함수
- assertIsNot() 함수
- assertIs() 함수
- assertIsNone() 함수
- assertIsNotNone() 함수
- assertEqual() 함수
- assertIn() 함수
- assertNotIsInstance() 함수
- assertIsInstance() 함수
- assertNotAlmostEqual() 함수
- assertGreater() 함수
- assertGreaterEqual() 함수
- assertLess() 함수
- assertAlmostEqual() 함수
- 파이썬 | 단위 테스트에서의 예외적 조건 테스트
- 파이썬에서 단위 테스트 시작하기
- 단위 테스트를 위해 Pytest를 사용하는 방법
- 파이썬 단위 테스트에 Mock을 이용하여 웹 크롤러 함수를 멋지게 테스트하는 방법은?
unittest를 사용하여 테스트를 실행하기 위한 일반적인 디렉토리 구조를 살펴보겠습니다 .
unittest 모듈 은 소스 코드의 개별 단위의 기능을 테스트하는 데 사용되는 내장 Python 라이브러리입니다. 개발자가 반복 가능한 테스트를 작성하고 실행할 수 있는 강력한 도구로, 코드가 의도한 대로 작동하고 시간이 지나도 안정적으로 유지되는지 확인하는 데 도움이 될 수 있습니다.
unittest 모듈은 다음을 포함한 여러 가지 주요 기능을 제공합니다.
- 관련 테스트를 그룹화하는 데 사용할 수 있는 테스트 케이스 및 테스트 모음을 정의하는 기능
- 코드가 예상대로 동작하는지 확인하는 데 사용할 수 있는 어설션 메서드 세트
- 테스트 프로세스를 가속화하는 데 도움이 되는 병렬 테스트 실행 지원
디렉토리 구조의 세부 사항을 살펴보기 전에 unittest와 관련된 몇 가지 핵심 개념을 이해하는 것이 중요합니다.
- 테스트 케이스: 테스트 케이스는 개별 테스트 단위입니다. 일련의 입력과 해당 입력에 대한 예상 출력 또는 동작으로 구성됩니다. 테스트 케이스는 unittest 모듈을 사용하여 작성되며 일반적으로 주 코드베이스와 별도의 파일에 저장됩니다.
- 테스트 모음: 테스트 모음은 함께 실행되는 테스트 사례 모음입니다. 테스트 모음을 사용하면 관련 테스트 사례를 그룹화하여 단일 단위로 실행할 수 있습니다.
- 테스트 러너: 테스트 러너는 테스트 모음을 실행하고 결과를 표시하는 도구입니다. Python에는 내장된 unittest 러너와 pytest와 같은 타사 도구를 포함하여 여러 테스트 러너가 있습니다.
다음은 Python 프로젝트에서 unittest를 사용하여 테스트를 구성하기 위한 일반적인 디렉토리 구조입니다.
프로젝트/
├── 패키지/
│ ├── __init__.py
│ ├── 모듈.py
├── 테스트/
│ ├── __init__.py
│ ├── 테스트 모듈.py
├── setup.py
- project/는 Python 프로젝트의 루트 디렉토리입니다. 여기에는 프로젝트와 관련된 모든 파일과 하위 디렉토리가 들어 있습니다.
- package/는 Python 패키지의 코드가 들어 있는 하위 디렉토리입니다. 패키지는 다른 Python 프로그램에서 가져와 사용할 수 있는 모듈의 모음입니다. init.py 파일은 Python에 이 디렉토리를 패키지로 처리해야 한다고 알려주는 특수 파일입니다. module.py 파일은 프로젝트의 다른 부분에서 사용할 수 있는 코드가 들어 있는 Python 모듈입니다.
- tests/는 프로젝트의 테스트 코드가 들어있는 하위 디렉토리입니다.
- setup.py 는 프로젝트를 설치하는 데 사용되는 Python 스크립트입니다. 이름, 버전, 종속성과 같은 프로젝트에 대한 메타데이터를 지정하고 프로젝트의 진입점을 정의합니다.
다음은 Python에서 unittest 모듈을 테스트하는 데 사용할 수 있는 완전한 작동 코드의 예입니다.
우리는 서로 다른 수학 함수를 포함하는 math_functions.py 와 math_functions.py와 관련된 테스트를 포함하는 test_math_functions.py라는 두 개의 다른 파일을 만들 것입니다 . 우리는 Python에서 unittest를 사용하여 테스트를 실행하는 간단한 예를 취하고 있기 때문에 일반적인 구조를 만들지 않습니다.
# math_functions.py
def addition(a, b):
return a + b
def subtraction(a, b):
return a - b
def multiplication(a, b):
return a * b
def division(a, b):
return a / b
- test_math_functions.py: 이 코드에서는 math_functions.py에 있는 함수를 테스트하기 위한 메인 프로그램을 작성했습니다.
# test_math_functions.py
import unittest
from math_functions import *
# Define class to test the program
class TestMathFunctions(unittest.TestCase):
# Function to test addition function
def test_addition(self):
result = addition(2, 2)
self.assertEqual(result, 4)
# Function to test addition function
def test_subtraction(self):
result = subtraction(4, 2)
self.assertEqual(result, 2)
# Function to test addition function
def test_multiplication(self):
result = multiplication(2, 3)
self.assertEqual(result, 6)
# Function to test addition function
def test_division(self):
result = division(4, 2)
self.assertEqual(result, 2)
if __name__ == '__main__':
unittest.main()
- 설명:
- 먼저 unittest 모듈을 가져옵니다.
- math_functions 모듈 이 가져왔습니다. 이 모듈은 테스트 중인 함수를 포함해야 합니다.
- TestMathFunctions 라는 새로운 클래스가 정의되었습니다. 이는 테스트를 위한 여러 가지 assert 메서드를 제공하는 클래스입니다.
- TestMathFunctions 클래스에는 test_addition , test_subtraction , test_multiplication , test_division 의 네 가지 테스트 메서드가 정의되어 있습니다. 이러한 메서드는 math_functions 모듈 에서 해당 함수를 테스트합니다.
- 각 테스트 메서드에서 테스트 중인 함수는 특정 입력 인수로 호출됩니다. 그런 다음 함수의 결과는 assertEqual 메서드를 사용하여 확인되며, 이 메서드는 결과가 예상 출력과 같은지 확인합니다. 결과가 예상 출력과 같지 않으면 'assertEqual' 메서드가 오류를 발생시켜 테스트가 실패합니다.
6.스크립트가 실행될 때 하단의 if name == 'main': 블록은 테스트 모음을 실행합니다. unittest.main ( ) 함수가 호출되고, TestMathFunctions 클래스 의 테스트를 실행합니다 .
- 이 코드를 실행하려면 먼저 “math_functions.py” 파일과 “test_math_functions.py” 파일을 같은 디렉토리에 저장합니다. 그런 다음 터미널 창을 열고 이 파일이 있는 디렉토리로 이동합니다. 마지막으로 다음 명령을 실행합니다.
$ Python -m unittest
- 출력:
출력은 일반적으로 일련의 점 또는 기타 기호로 구성되며, 각 기호는 단일 테스트 사례의 실행을 나타냅니다. 점(.)은 테스트 사례가 통과했음을 나타내고, "F"는 테스트 사례가 실패했음을 나타냅니다. 모든 테스트 사례가 통과하면 모든 테스트가 실행되었고 실행된 총 테스트 수가 표시되어야 합니다.
....
------------------------------------- -------
Ran 4 tests in 0.000s
테스트 케이스 중 하나라도 실패하면 출력에는 무엇이 잘못되었는지를 나타내는 자세한 오류 메시지가 포함됩니다. 테스트 케이스가 실패한 예를 들어보겠습니다. 이를 위해 math_functions.py 파일을 수정하여 정수 값이 예상되므로 오류를 발생시키는 문자열을 반환 하도록 했습니다 .
# Program with error in one function
def addition(a, b):
return "error_causing_format"
def subtraction(a, b):
return a - b
def multiplication(a, b):
return a * b
def division(a, b):
return a / b
이제 이전과 동일하게 “test_math_functions.py” 파일을 실행하면 다음과 같은 오류 메시지가 표시됩니다.
F...
================================================= =====================
FAIL: test_addition (test_math_functions.TestMathFunctions.test_addition)
Traceback (most recent call last):
File "C:\Users\siddh\OneDrive\Desktop\GFG\test_math_functions.py", line 7, in test_addition
self.assertEqual(result, 4)
AssertionError: 'error' != 4
------------------------------------- -------
Ran 4 tests in 0.000s
FAILED (failures=1)
위의 경우, 첫 번째 테스트 케이스가 실패했으므로 출력은 FAILED 상태를 표시합니다.
- unittest를 사용하여 테스트를 구성할 때 고려해야 할 몇 가지 추가 사항은 다음과 같습니다.
- 일반적으로 테스트 파일을 메인 코드 파일과 분리하는 것이 좋습니다. 이렇게 하면 코드베이스를 깔끔하고 체계적으로 유지하는 데 도움이 되며 메인 코드와의 충돌을 걱정하지 않고도 테스트를 실행하기가 더 쉬워집니다.
- unittest.TestCase 클래스의 "setUp()" 및 "tearDown()" 메서드를 사용하여 각 테스트 케이스가 실행되기 전 또는 후에 필요한 설정 또는 정리 작업을 수행할 수 있습니다. 이는 테스트 데이터를 만들거나 테스트 후 정리하는 데 도움이 될 수 있습니다.
- unittest.TestCase 클래스의 "skipTest()" 메서드를 사용하면 관련성이 없거나 필요한 종속성을 사용할 수 없는 경우 특정 테스트 케이스를 건너뛸 수 있습니다.
- 테스트를 실행할 때 "-v" 플래그를 사용하여 자세한 출력을 활성화할 수 있으며, 이는 각 테스트 케이스의 이름을 실행할 때 표시합니다. 이는 디버깅이나 테스트 모음에 대한 더 나은 이해를 얻는 데 도움이 될 수 있습니다.
- 테스트를 실행할 때 "-s" 플래그를 사용하여 테스트 파일이 포함된 디렉토리를 지정할 수 있습니다. 이는 테스트 파일이 기본 위치(예: "tests")에 없는 경우 유용할 수 있습니다.
- 테스트를 실행할 때 "-p" 플래그를 사용하여 실행할 테스트 파일을 선택하기 위한 패턴을 지정할 수 있습니다. 테스트 모음의 하위 집합만 실행하려는 경우 이 기능이 유용할 수 있습니다.
파이썬의 assertLessEqual() 은 단위 테스트에서 첫 번째 주어진 값이 두 번째 값보다 작거나 같은지 여부를 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 첫 번째 주어진 값이 두 번째 값보다 작거나 같은지 확인하고, 그렇다면 true를 반환하고, 그렇지 않으면 첫 번째 값이 두 번째 값보다 작거나 같지 않으면 false를 반환합니다.
-
구문 : assertLessEqual(첫 번째, 두 번째, 메시지=없음)
-
매개변수 : assertLessEqual()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(정수)
- second : 두 번째 입력 값(정수)
- message : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if values1 is less or equal than value2
def test_negativeForLessEqual(self):
first = 6
second = 5
# error message in case if test case got failed
message = "first value is not less than or equal to second value."
# assert function() to check if values1 is less or equal than value2
self.assertLessEqual(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
F ======================================================================
FAIL: test_negativeForLessEqual (__main__.TestStringMethods)
———————————————————————
- Traceback (most recent call last):
File “p1.py”, line 13, in test_negativeForLessEqual
self.assertLessEqual(first, second, message) AssertionError: 6 not less than or equal to 5 : 6은 5보다 작거나 같지 않음: 첫 번째 값이 두 번째 값보다 작거나 같지 않음.
———————————————————————
- Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# positive test function to test if value1 is less or equal than value2
def test_positiveForLessEqual(self):
first = 4
second = 4
# error message in case if test case got failed
message = "first value is not less than or equal to second value."
# assert function() to check if values1 is less or equal than value2
self.assertLessEqual(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
———————————————————————
- Ran 1 test in 0.000s
OK
파이썬의 assertNotIn ()은 문자열이 other에 포함되어 있지 않은지 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 문자열 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 키가 컨테이너 문자열에 포함되어 있지 않으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertNotIn(키, 컨테이너, 메시지)
-
매개변수 : assertNotIn ()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 키 : 주어진 컨테이너에서 존재 여부가 확인되는 문자열
- 컨테이너 : 키 문자열이 검색되는 문자열
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_negative(self):
key = "geeks"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is present in container."
# assertNotIn() to check if key is in container
self.assertNotIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative (__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 12, in test_negative
self.assertNotIn(key, container, message)
AssertionError: 'geeks'가 예기치 않게 'geeksforgeeks'에서 발견되었습니다: 키가 컨테이너에 있습니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_positive(self):
key = "gfgs"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is present in container."
# assertNotIn() to check if key is in container
self.assertNotIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertNotIn ()은 문자열이 other에 포함되어 있지 않은지 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 문자열 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 키가 컨테이너 문자열에 포함되어 있지 않으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertNotIn(키, 컨테이너, 메시지)
-
매개변수 : assertNotIn ()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 키 : 주어진 컨테이너에서 존재 여부가 확인되는 문자열
- 컨테이너 : 키 문자열이 검색되는 문자열
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_negative(self):
key = "geeks"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is present in container."
# assertNotIn() to check if key is in container
self.assertNotIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 12, in test_negative
self.assertNotIn(key, container, message)
AssertionError: 'geeks'가 예기치 않게 'geeksforgeeks'에서 발견되었습니다: 키가 컨테이너에 있습니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_positive(self):
key = "gfgs"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is present in container."
# assertNotIn() to check if key is in container
self.assertNotIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertNotEqual()은 두 값의 부등성을 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 두 입력 값이 모두 같지 않으면 assertNotEqual()은 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertNotEqual(첫 번째 값, 두 번째 값, 메시지)
-
매개변수: assertNotEqual()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- firstValue: 함수에 의한 비교에 사용되는 모든 유형의 변수
- secondValue: 함수에 의한 비교에 사용되는 모든 유형의 변수
- 메시지: 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test equality of two value
def test_negative(self):
firstValue = "geeks"
secondValue = "geeksg"
# error message in case if test case got failed
message = "First value and second value are not unequal !"
# assertNotEqual() to check unequality of first & second value
self.assertNotEqual(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", line 12, in test_negative
self.assertNotEqual(첫 번째 값, 두 번째 값, 메시지)
AssertionError: 'geeks' == 'geeks' : 첫 번째 값과 두 번째 값이 같지 않습니다!
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test equality of two value
def test_positive(self):
firstValue = "geeks"
secondValue = "geeks"
# error message in case if test case got failed
message = "First value and second value are not unequal !"
# assertNotEqual() to check equality of first & second value
self.assertNotEqual(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertTrue()는 단위 테스트에서 테스트 값을 true와 비교하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 두 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 테스트 값이 true이면 assertTrue()는 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertTrue(testValue, message)
-
매개변수 : assertTrue()는 아래에 설명과 함께 나열된 두 개의 매개변수를 허용합니다.
- testValue : 함수의 비교에 사용되는 boolean 유형의 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function
def test_negative(self):
testValue = False
# error message in case if test case got failed
message = "Test value is not true."
# assertTrue() to check true of test value
self.assertTrue( testValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 11번째 줄, test_negative
self.assertNotIn(테스트값, 메시지)
AssertionError: False는 참이 아닙니다: 테스트 값이 참이 아닙니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function
def test_positive(self):
testValue = True
# error message in case if test case got failed
message = "Test value is not true."
# assertTrue() to check true of test value
self.assertTrue( testValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertFalse ()는 단위 테스트에서 테스트 값을 false와 비교하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 두 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 테스트 값이 false이면 assertFalse ()는 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertFalse(testValue, message)
-
매개변수 : assertFalse ()는 아래에 설명과 함께 나열된 두 개의 매개변수를 허용합니다.
- testValue : 함수에 의한 비교에 사용되는 부울 유형의 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function
def test_negative(self):
testValue = True
# error message in case if test case got failed
message = "Test value is not false."
# assetFalse() to check test value as false
self.assertFalse( testValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 11번째 줄, test_negative
self.assertNotIn(테스트값, 메시지)
AssertionError: True is not false : Test value is not false.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function
def test_positive(self):
testValue = False
# error message in case if test case got failed
message = "Test value is not false."
# assertFalse() to check test value as false
self.assertFalse( testValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIsNot()은 단위 테스트에서 첫 번째와 두 번째 입력 값이 같은 객체로 평가되지 않는지 테스트하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 사용하고 assert 조건에 따라 부울 값을 반환합니다. 두 입력이 모두 같은 객체로 평가되지 않으면 assertIsNot()은 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIsNot(firstValue, secondValue, message)
-
매개변수 : assertIsNot()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 함수에 의한 비교에 사용되는 모든 유형의 firstValue 변수
- secondValue : 함수에 의한 비교에 사용되는 모든 유형의 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class DummyClass:
x = 5
class TestMethods(unittest.TestCase):
# test function
def test_negative(self):
firstValue = DummyClass()
secondValue = firstValue
# error message in case if test case got failed
message = "First value & second value evaluates to same object !"
# assertIs() to check that if first & second don't evaluated to same object
self.assertIsNot(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 15번째 줄, test_negative
self.assertNotIn(첫 번째 값, 두 번째 값, 메시지)
AssertionError: 예상치 못하게 동일함: <__main__.DummyClass 객체가 0x7f75c2e33b70에 있음>
: 첫 번째 값과 두 번째 값은 같은 객체로 평가됩니다!
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class DummyClass:
x = 5
class TestMethods(unittest.TestCase):
# test function to test object equality of two value
def test_positive(self):
firstValue = DummyClass()
secondValue = DummyClass()
# error message in case if test case got failed
message = "First value and second value evaluated to same object !"
# assertIs() to check that if first & second don't evaluates to same object
self.assertIsNot(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIs()는 단위 테스트에서 첫 번째와 두 번째 입력 값이 같은 객체로 평가되는지 여부를 테스트하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 사용하고 assert 조건에 따라 부울 값을 반환합니다. 두 입력이 모두 같은 객체로 평가되면 assertIs()는 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIs(firstValue, secondValue, message)
-
매개변수 : assertIs()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 함수에 의한 비교에 사용되는 모든 유형의 firstValue 변수
- secondValue : 함수에 의한 비교에 사용되는 모든 유형의 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class DummyClass:
x = 5
class TestMethods(unittest.TestCase):
# test function to test object equality of two value
def test_negative(self):
firstValue = DummyClass()
secondValue = DummyClass()
# error message in case if test case got failed
message = "First value & second value are not evaluated to same object !"
# assertIs() to check that if first & second evaluated to same object
self.assertIs(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 15번째 줄, test_negative
self.assertNotIn(첫 번째 값, 두 번째 값, 메시지)
AssertionError: <__main__.DummyClass 객체가 0x7f1d20251b70에 있습니다>
<__main__.DummyClass 객체가 0x7f1d20251ba8에 없습니다> :
첫 번째 값과 두 번째 값은 같은 객체로 평가되지 않습니다!
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class DummyClass:
x = 5
class TestMethods(unittest.TestCase):
# test function to test object equality of two value
def test_positive(self):
firstValue = DummyClass()
secondValue = firstValue
# error message in case if test case got failed
message = "First value and second value are not evaluated to same object !"
# assertIs() to check that if first & second evaluated to same object
self.assertIs(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIsNone ()은 단위 테스트에서 입력 값이 None 인지 아닌지 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다 . 이 함수는 두 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 입력 값이 None이면 assertIsNone ()은 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIsNone(testValue, message)
-
매개변수: assertIsNone ()은 아래에 설명과 함께 나열된 두 개의 매개변수를 허용합니다.
- testValue : None과 같은지 확인하기 위한 입력 값으로 테스트 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestMethods(unittest.TestCase):
# test function
def test_negative(self):
firstValue = "geeks"
# error message in case if test case got failed
message = "Test value is not none."
# assertIsNone() to check that if input value is none
self.assertIsNone(firstValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 14번째 줄, test_negative
self.assertNotIn(첫 번째 값, 메시지)
AssertionError: 'geeks'는 None이 아닙니다: 테스트 값이 none이 아닙니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestMethods(unittest.TestCase):
# test function
def test_positive(self):
firstValue = None
# error message in case if test case got failed
message = "Test value is not none."
# assertIsNone() to check that if input value is none
self.assertIsNone(firstValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIsNotNone ()은 단위 테스트에서 입력 값이 None이 아닌지 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다 . 이 함수는 두 개의 매개변수를 입력으로 사용하고 assert 조건에 따라 부울 값을 반환합니다. 입력 값이 None과 같지 않으면 assertIsNotNone ()은 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIsNotNone(testValue, message)
-
매개변수: assertIsNotNone ()은 아래에 설명과 함께 나열된 두 개의 매개변수를 허용합니다.
- testValue : None과 같은지 확인하기 위한 입력 값으로 테스트 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestMethods(unittest.TestCase):
# test function
def test_negative(self):
firstValue = None
# error message in case if test case got failed
message = "Test value is none."
# assertIsNotNone() to check that if input value is not none
self.assertIsNotNone(firstValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 11번째 줄, test_negative
self.assertNotIn(첫 번째 값, 메시지)
AssertionError: 예기치 않게 None: 테스트 값이 none입니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestMethods(unittest.TestCase):
# test function
def test_positive(self):
firstValue = "geeks"
# error message in case if test case got failed
message = "Test value is none."
# assertIsNotNone() to check that if input value is not none
self.assertIsNotNone(firstValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertEqual()은 두 값의 동일성을 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 두 입력 값이 같으면 assertEqual()은 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertEqual(firstValue, secondValue, message)
-
매개변수: assertEqual()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 함수에 의한 비교에 사용되는 모든 유형의 firstValue 변수
- secondValue : 함수에 의한 비교에 사용되는 모든 유형의 변수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test equality of two value
def test_negative(self):
firstValue = "geeks"
secondValue = "gfg"
# error message in case if test case got failed
message = "First value and second value are not equal !"
# assertEqual() to check equality of first & second value
self.assertEqual(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 12번째 줄, test_negative
self.assertNotIn(첫 번째 값, 두 번째 값, 메시지)
AssertionError: 'geeks' != 'gfg'
- geeks
+ gfg
: 첫 번째 값과 두 번째 값이 같지 않습니다!
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# unit test case
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test equality of two value
def test_positive(self):
firstValue = "geeks"
secondValue = "geeks"
# error message in case if test case got failed
message = "First value and second value are not equal !"
# assertEqual() to check equality of first & second value
self.assertEqual(firstValue, secondValue, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIn()은 문자열이 other에 포함되어 있는지 여부를 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 문자열 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 키가 컨테이너 문자열에 포함되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIn(키, 컨테이너, 메시지)
-
매개변수 : assertIn()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- 키 : 주어진 컨테이너에서 존재 여부가 확인되는 문자열
- 컨테이너 : 키 문자열이 검색되는 문자열
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_negative(self):
key = "gfg"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is not in container."
# assertIn() to check if key is in container
self.assertIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 12, in test_negative
self.assertNotIn(key, container, message)
AssertionError: 'geeksforgeeks'에서 'gfg'를 찾을 수 없습니다: 키가 컨테이너에 없습니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# test function to test whether key is present in container
def test_positive(self):
key = "geeks"
container = "geeksforgeeks"
# error message in case if test case got failed
message = "key is not in container."
# assertIn() to check if key is in container
self.assertIn(key, container, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertNotIsInstance ()는 객체가 주어진 클래스의 인스턴스가 아닌지 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 객체가 주어진 클래스의 인스턴스가 아니면 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIsInstance(객체, 클래스 이름, 메시지)
-
매개변수 : assertNotIsInstance ()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- object : 주어진 클래스의 인스턴스로 확인되는 객체
- className : 객체 인스턴스와 비교할 클래스 이름
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
# test class
class Myclass:
x = 5
class TestClass(unittest.TestCase):
# test function to test whether obj is instance of class
def test_negative(self):
objectName = Myclass()
# error message in case if test case got failed
message = "given object is instance of Myclass."
# assertIsInstance() to check if obj is instance of class
self.assertNotIsInstance(objectName, Myclass, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 17, in test_negative
self.assertNotIn(key, container, message)
AssertionError: <__main__.Myclass 객체 at 0x7fab0d3affd0>는 <class '__main__.Myclass'>의 인스턴스입니다. 주어진 객체는 Myclass의 인스턴스입니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
# test class
class Myclass:
x = 5
class Myclass2:
x = 5
class TestClass(unittest.TestCase):
# test function to test whether obj is instance of class
def test_negative(self):
objectName = Myclass()
# error message in case if test case got failed
message = "given object is instance of Myclass."
# assert function() to check if obj is instance of class
self.assertNotIsInstance(objectName, Myclass2, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertIsInstance ()는 객체가 주어진 클래스의 인스턴스인지 아닌지 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다. 객체가 주어진 클래스의 인스턴스이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
-
구문: assertIsInstance(객체, 클래스 이름, 메시지)
-
매개변수 : assertIsInstance ()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- object : 주어진 클래스의 인스턴스로 확인되는 객체
- className : 객체 인스턴스와 비교할 클래스 이름
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
# test class
class Myclass:
x = 5
class Myclass2:
x = 6
class TestClass(unittest.TestCase):
# test function to test whether obj is instance of class
def test_negative(self):
objectName = Myclass()
# error message in case if test case got failed
message = "given object is not instance of Myclass."
# assertIsInstance() to check if obj is instance of class
self.assertIsInstance(objectName, Myclass2, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negative(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 22, in test_negative
self.assertNotIn(객체 이름, Myclass2, 메시지)
AssertionError: <__main__.Myclass 객체 at 0x7f1e9bead0b8>는 <class '__main__.Myclass2'>의 인스턴스가 아닙니다: 주어진 객체는 Myclass의 인스턴스가 아닙니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
# test class
class Myclass:
x = 5
class TestClass(unittest.TestCase):
# test function to test whether obj is instance of class
def test_positive(self):
objectName = Myclass()
# error message in case if test case got failed
message = "given object is not instance of Myclass."
# assertIsInstance() to check if obj is instance of class
self.assertIsInstance(objectName, Myclass, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertNotAlmostEqual ()은 두 주어진 값이 대략 . 가 아닌지 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다 . 이 함수는 다섯 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 첫 번째 와 두 번째가 거의 같지 않은지 확인하기 위해 차이를 계산하고, 소수 자릿수 ( 기본값 7)로 반올림한 다음 0과 비교합니다.
places 대신 delta가 제공되는 경우 first 와 second 의 차이는 delta 보다 작거나 같아야 합니다 .
-
구문: assertNotAlmostEqual(첫 번째, 두 번째, 장소=7, 메시지=없음, 델타=없음)
-
매개변수 : assertNotAlmostEqual ()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(정수)
- second : 두 번째 입력 값(정수)
- places : 근사치를 위한 소수 자릿수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
- delta : 근사치를 위한 델타 값
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if values are almost not-equal with place
def test_negativeWithPlaces(self):
first = 4.4555
second = 4.4566
decimalPlace = 2
# error message in case if test case got failed
message = "first and second are almost equal."
# assert function() to check if values are almost not-equal
self.assertNotAlmostEqual(first, second, decimalPlace, message)
# positive test function to test if values are almost not-equal with place
def test_positiveWithPlaces(self):
first = 4.4555
second = 4.4566
decimalPlace = 3
# error message in case if test case got failed
message = "first and second are almost equal."
# assert function() to check if values are almost not-equal
self.assertNotAlmostEqual(first, second, decimalPlace, message)
# negative test function to test if values are almost not-equal with delta
def test_negativeWithDelta(self):
first = 4.4555
second = 4.4566
delta = 0.002
# error message in case if test case got failed
message = "first and second are almost equal."
# assert function() to check if values are almost equal
self.assertNotAlmostEqual(first, second, None, message, delta)
# positive test function to test if values are almost not-equal with delta
def test_positiveWithDelta(self):
first = 4.4555
second = 4.4566
delta = 0.0001
# error message in case if test case got failed
message = "first and second are almost equal."
# assert function() to check if values are almost not-equal
self.assertNotAlmostEqual(first, second, None, message, delta)
if __name__ == '__main__':
unittest.main()
- 출력
FF..
================================================= =====================
FAIL: test_negativeWithDelta(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 34, in test_negativeWithDelta
self.assertNotIn(첫 번째, 두 번째, 없음, 메시지, 델타)
AssertionError: 4.4555 == 4.4566 (델타 0.002 이내) : 첫 번째와 두 번째가 거의 같습니다.
================================================= =====================
FAIL: test_negativeWithDelta(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/e99e85838dde0c8ef29ab17fef478979.py", line 14, in test_negativeWithDelta
self.assertNotIn(첫 번째, 두 번째, 소수점 자리, 메시지)
AssertionError: 4.4555 == 4.4566은 2곳에서 발생합니다. 첫 번째와 두 번째는 거의 같습니다.
------------------------------------- -------
Ran 4 test in 0.001s
FAILED (failures=2)
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertGreater() 는 단위 테스트에서 첫 번째 주어진 값이 두 번째 값보다 큰지 여부를 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 첫 번째 주어진 값이 두 번째 값보다 큰지 확인하고, 큰 경우 true를 반환하고, 큰 경우 false를 반환합니다.
-
구문: assertGreater(첫 번째, 두 번째, 메시지=없음)
-
매개변수: assertGreater()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(정수)
- second : 두 번째 입력 값(정수)
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if values1
# is greater than value2
def test_negativeForGreater(self):
first = 4
second = 5
# error message in case if test case got failed
message = "first value is not greater that second value."
# assert function() to check if values1 is
# greater than value2
self.assertGreater(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negativeForGreater (__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 13번째 줄, test_negativeForGreater
self.assertGreater(first, second, message)
AssertionError: 4가 5보다 크지 않음: 첫 번째 값이 두 번째 값보다 크지 않음.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# positive test function to test if values
# are almost equal with place
def test_positiveForGreater(self):
first = 4
second = 3
# error message in case if test case got failed
message = "first value is not greater that second value."
# assert function() to check if values1 is
# greater than value2
self.assertGreater(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertGreaterEqual() 은 단위 테스트에서 첫 번째 주어진 값이 두 번째 값보다 크거나 같은지 여부를 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 첫 번째 주어진 값이 두 번째 값보다 크거나 같은지 확인하고, 그렇다면 true를 반환하고, 그렇지 않으면 첫 번째 값이 두 번째 값보다 크거나 같지 않으면 false를 반환합니다.
-
구문: assertGreaterEqual(first, second, message=None)
-
매개변수 : assertGreaterEqual()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(정수)
- second : 두 번째 입력 값(정수)
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if values1 is greater or equal than value2
def test_negativeForGreaterEqual(self):
first = 4
second = 5
# error message in case if test case got failed
message = "first value is not greater or equal than second value."
# assert function() to check if values1 is greater or equal than value2
self.assertGreaterEqual(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negativeForGreaterEqual (__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 13번째 줄, test_negativeForGreaterEqual에서
self.assertGreaterEqual(first, second, message)
AssertionError: 4 5보다 크거나 같지 않음: 첫 번째 값이 두 번째 값보다 크거나 같지 않음.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# positive test function to test if values1 is greater than or equal to value2
def test_positiveForGreaterEqual(self):
first = 4
second = 4
# error message in case if test case got failed
message = "first value is not greater or equal than second value."
# assert function() to check if values1 is greater or equal than value2
self.assertGreaterEqual(first, second, message)
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertLess()는 단위 테스트에서 첫 번째 주어진 값이 두 번째 값보다 작은지 여부를 확인하는 데 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 세 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 첫 번째 주어진 값이 두 번째 값보다 작은지 확인하고, 작은 경우 true를 반환하고, 작은 경우 false를 반환합니다.
-
구문: assertLess(첫 번째, 두 번째, 메시지=없음)
-
매개변수 : assertLess()는 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(정수)
- second : 두 번째 입력 값(정수)
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if
# values1 is less than value2
def test_negativeForLess(self):
first = 6
second = 5
# error message in case if test case got failed
message = "first value is not less that second value."
# assert function() to check if values1 is
# less than value2
self.assertLess(first, second, message)
# main for function call
if __name__ == '__main__':
unittest.main()
- 출력
F
================================================= =====================
FAIL: test_negativeForLess (__main__.TestStringMethods)
Traceback (most recent call last):
File "p1.py", 13번째 줄, test_negativeForLess에서
self.assertLess(first, second, message)
AssertionError: 5는 5보다 작지 않음: 첫 번째 값이 두 번째 값보다 작지 않습니다.
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# positive test function to test if
# values are almost equal with place
def test_positiveForLess(self):
first = 2
second = 3
# error message in case if test case got failed
message = "first value is not less that second value."
# assert function() to check if values1 is
# less than value2
self.assertLess(first, second, message)
# main for function call
if __name__ == '__main__':
unittest.main()
- 출력
.
------------------------------------- -------
Ran 1 test in 0.000s
OK
참고 : https://docs.python.org/3/library/unittest.html
파이썬의 assertAlmostEqual()은 두 주어진 값이 거의 같은지 여부를 확인하기 위해 단위 테스트에서 사용되는 단위 테스트 라이브러리 함수입니다. 이 함수는 다섯 개의 매개변수를 입력으로 받고 assert 조건에 따라 부울 값을 반환합니다.
이 함수는 차이를 계산하고, 소수 자릿수 ( 기본값 7)로 반올림한 다음, 0과 비교하여 첫 번째 와 두 번째가 거의 같은지 확인합니다.
places 대신 delta가 제공되는 경우 first 와 second 의 차이는 delta 보다 작거나 같아야 합니다 .
-
구문: assertAlmostEqual(첫 번째, 두 번째, 장소=7, 메시지=없음, 델타=없음)
-
매개변수 : assertAlmostEqual()은 아래에 설명과 함께 나열된 세 개의 매개변수를 허용합니다.
- first : 첫 번째 입력 값(float 또는 int)
- second : 두 번째 입력 값(float 또는 int)
- places : 근사치를 위한 소수 자릿수
- 메시지 : 테스트 케이스가 실패했을 때 표시되는 메시지인 문자열 문장입니다.
- delta : 근사치를 위한 델타 값
아래에는 주어진 assert 함수에 대한 긍정적 및 부정적 테스트 사례를 설명하는 두 가지 다른 예가 나와 있습니다.
# test suite
import unittest
class TestStringMethods(unittest.TestCase):
# negative test function to test if values are almost equal with place
def test_negativeWithPlaces(self):
first = 4.4555
second = 4.4566
decimalPlace = 3
# error message in case if test case got failed
message = "first and second are not almost equal."
# assert function() to check if values are almost equal
self.assertAlmostEqual(first, second, decimalPlace, message)
# positive test function to test if values are almost equal with place
def test_positiveWithPlaces(self):
first = 4.4555
second = 4.4566
decimalPlace = 2
# error message in case if test case got failed
message = "first and second are not almost equal."
# assert function() to check if values are almost equal
self.assertAlmostEqual(first, second, decimalPlace, message)
# negative test function to test if values are almost equal with delta
def test_negativeWithDelta(self):
first = 4.4555
second = 4.4566
delta = 0.0001
# error message in case if test case got failed
message = "first and second are not almost equal."
# assert function() to check if values are almost equal
self.assertAlmostEqual(first, second, None, message, delta)
# positive test function to test if values are almost equal with delta
def test_positiveWithDelta(self):
first = 4.4555
second = 4.4566
delta = 0.002
# error message in case if test case got failed
message = "first and second are not almost equal."
# assert function() to check if values are almost equal
self.assertAlmostEqual(first, second, None, message, delta)
if __name__ == '__main__':
unittest.main()
- 출력
FF..
================================================= =====================
FAIL: test_negativeWithDelta(__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/2c36bbd2c940a6c7b81a901ebfdd2ad8.py", 34번째 줄, test_negativeWithDelta에서
self.assertAlmostEqual(first, second, None, message, delta)
AssertionError: 4.4555 != 4.4566 within 0.0001 delta: first와 second가 거의 같지 않습니다.
===============================================================================
FAIL: test_negativeWithPlaces (__main__.TestStringMethods)
Traceback (most recent call last):
File "/home/2c36bbd2c940a6c7b81a901ebfdd2ad8.py", 14번째 줄, test_negativeWithPlaces에서
self.assertAlmostEqual(first, second,decimalPlace, message)
AssertionError: 4.4555 != 4.4566 3곳 내에서 : first와 second가 거의 같지 않음.
------------------------------------- -------
Ran 4 tests in 0.001s
FAILED (failures=2)
참고 : https://docs.python.org/3/library/unittest.html
이 글은 예외가 발생하는지 깔끔하게 테스트하는 단위 테스트를 작성하는 것을 목표로 합니다. 예외를 테스트하려면 assertRaises() 메서드를 사용합니다.
import unittest
# A simple function to illustrate
def parse_int(s):
return int(s)
class TestConversion(unittest.TestCase):
def test_bad_int(self):
self.assertRaises(ValueError, parse_int, 'N/A')
import errno
class TestIO(unittest.TestCase):
def test_file_not_found(self):
try:
f = open('/file/not/found')
except IOError as e:
self.assertEqual(e.errno, errno.ENOENT)
else:
self.fail('IOError not raised')
이 assertRaises() 방법은 예외의 존재 여부를 테스트하는 편리한 방법을 제공합니다. 일반적인 함정은 예외로 인해 스스로 작업을 수행하려는 테스트를 수동으로 작성하는 것입니다.
class TestConversion(unittest.TestCase):
def test_bad_int(self):
try:
r = parse_int('N/A')
except ValueError as e:
self.assertEqual(type(e), ValueError)
이러한 접근 방식의 문제점은 예외가 전혀 발생하지 않는 경우와 같은 코너 케이스를 잊기 쉽다는 것입니다. 그렇게 하려면 아래 코드에서 볼 수 있듯이 해당 상황에 대한 추가 검사를 추가해야 합니다.
class TestConversion(unittest.TestCase):
def test_bad_int(self):
try:
r = parse_int('N/A')
except ValueError as e:
self.assertEqual(type(e), ValueError)
else:
self.fail('ValueError not raised')
이 assertRaises()방법은 단순히 이러한 세부 사항을 처리하므로 사용하는 것이 좋습니다. 유일한 제한 사항은 assertRaises()생성된 예외 개체의 값을 테스트할 수 있는 수단을 제공하지 않는다는 것입니다. 이를 위해서는 수동으로 테스트해야 합니다. 이 두 극단의 어딘가에 assertRaisesRegex() 메서드를 사용할 수 있으며, 이를 통해 예외를 테스트하고 동시에 예외의 문자열 표현에 대한 정규 표현식 일치를 수행할 수 있습니다.
class TestConversion(unittest.TestCase):
def test_bad_int(self):
self.assertRaisesRegex(
ValueError, 'invalid literal .*',
parse_int, 'N/A')
assertRaises()및 에 대한 잘 알려지지 않은 사실 assertRaisesRegex()은 이들이 컨텍스트 관리자로도 사용될 수 있다는 것입니다.
class TestConversion(unittest.TestCase):
def test_bad_int(self):
with self.assertRaisesRegex(ValueError, 'invalid literal .*'):
r = parse_int('N/A')
이 양식은 테스트에 호출 가능한 항목을 실행하는 단순한 단계 외에 여러 단계(예: 설정)가 포함되어 있는 경우 유용할 수 있습니다.
파이썬에서 단위 테스트는 우리가 단위라고 부르는 다른 모듈과 파일을 테스트하기 위해 작성된 코드 세그먼트입니다. 파이썬 단위 테스트는 소프트웨어 개발 프로세스에서 매우 중요한 부분으로, 코드가 오류 없이 제대로 작동하는지 확인하는 데 도움이 됩니다. 이 글에서는 예제와 적절한 설명을 통해 파이썬 테스트 에 대해 알아보겠습니다.
- Python 단위 테스트란 무엇인가요?
- The Assert Statement
- 단위 테스트 구현 | Unittest
- 단위 테스트 구현 | Pytest
- 단위 테스트 구현 | Nose
- 단위 테스트 구현 | Doctest
- 파이썬 테스트에서 어설션을 작성하는 방법
- 더욱 진보된 테스트 시나리오
- 테스트 실행 자동화
Python 단위 테스트는 소프트웨어 애플리케이션의 개별 단위 또는 구성 요소를 시스템의 나머지 부분과 분리하여 테스트하는 소프트웨어 테스트 기술입니다. Python 단위 테스트의 주요 목표는 소프트웨어의 각 단위가 사양에 따라 설계된 대로 수행되는지 확인하는 것입니다. 각 단위 테스트는 코드의 작은 부분을 살펴보고, 상황이 약간 까다로워지더라도 작동하는지 확인합니다.
프로그래머는 각각의 부분을 개별적으로 테스트함으로써, 양말에 작은 구멍이 생겨 더 커지기 전에 찾는 것처럼, 실수를 일찍 발견하여 수정할 수 있습니다. 또한 개발자는 개발 주기 초기에 버그를 발견하여 수정함으로써 더 나은 코드 품질과 더 강력한 소프트웨어를 얻을 수 있습니다.
단위 테스트의 주요 아이디어는 코드가 잘 작동하고 나중에 문제가 발생하지 않는지 확인하는 것입니다. 따라서 개발자는 프로그램을 빌드하는 동안 이러한 테스트를 수행하여 프로그램이 강력하고 사람들이 사용할 때 깨지지 않는지 확인할 수 있습니다.
Python에는 단위 테스트를 보다 쉽게 만들어주는 두 가지 주요 프레임워크가 있습니다.
- Unittest
- Pytest
- Nose or Nose2
- Doctest
테스트 프레임워크로 들어가기 전에, assert 문을 이해해 보겠습니다. 이것은 일반적으로 unittest와 pytest와 같은 Python 단위 테스트 프레임워크에서 테스트 중에 코드의 정확성을 검증하는 데 사용됩니다. Python의 assert 문은 주어진 조건이 참인지 거짓인지 확인하는 데 사용됩니다. 이것은 주로 디버깅 및 테스트 목적으로 사용되어 코드 개발 중에 프로그래머가 내린 가정을 검증합니다.
assert 문의 구문 : Python에서 assert 문의 구문은 다음과 같습니다 .
- assert condition, message
- condition : 평가할 표현식입니다. True로 평가되면 프로그램은 정상적으로 실행을 계속합니다. False로 평가되면 AssertionError 예외가 발생합니다.
- 메시지 (선택 사항): 어설션이 실패할 때 추가 컨텍스트를 제공하기 위해 제공할 수 있는 선택 사항 메시지입니다. 이 메시지는 어설션이 실패할 때 추적과 함께 표시됩니다.
unittest는 Python으로 테스트하는 데 사용되는 표준 Python 라이브러리에 내장되어 있습니다. import unittest는 이를 사용하기 위한 코드의 시작 줄이어야 합니다. Python 버전에 따라 달라지는데, 이후 버전의 Python은 unittest를 지원하고 이전 버전은 unittest2를 지원하므로 다를 수 있습니다.
- 예 :
이 예제에서는 Python의 unittest 프레임워크를 사용하여 숫자 목록의 합이 예상 값과 일치하는지 확인하는 단위 테스트 클래스입니다.
# import library
import unittest
# create a class
class TestXXXXX(unittest.TestCase):
# define a function
def test_xxxxxxx(self):
data = [100, 200, 300]
result = sum(data)
self.assertEqual(result, 6000)
# driver code
if __name__ == '__main__':
unittest.main()
- 출력:
===========================================================================
F
================================================= =====================
FAIL: test_xxxxxxx (__main__.TestXXXXX)
Traceback (most recent call last):
File "......py", 8번째 줄, test_xxxxxxx에서
self.assertEqual(result, 6000)
AssertionError: 600 != 6000
------------------------------------- -------
Ran 1 test in 0.000s
FAILED (failures=1)
Pytest는 Python에서 테스트를 위해 Python에서 제공하는 내장 라이브러리입니다. 테스트를 작성하고 실행하는 과정을 간소화합니다. Pytest는 단위 테스트 테스트 케이스 실행을 지원합니다. 내장된 assert 문 지원, 테스트 케이스 필터링, 마지막으로 실패한 테스트에서 복귀 등의 이점이 있습니다.
명령 프롬프트에 다음 명령을 작성하여 Pytest를 설치할 수 있습니다.
pip install pytest
간단한 예로 시작해 보겠습니다. 여기서는 math_functions.py라는 이름의 파일을 만들 것입니다.
# math_functions.py
def add(x, y):
return x + y
def subtract(x, y):
return x - y
이제 test_math_functions.py 라는 이름의 다른 파일을 만들 것입니다 . 이 파일은 샘플 입력을 사용하여 pytest를 사용하여 테스트를 수행하기 위해 만들고 있습니다.
# test_math_functions.py
import math_functions
def test_add():
assert math_functions.add(2, 3) == 5
assert math_functions.add(-1, 1) == 0
assert math_functions.add(0, 0) == 0
def test_subtract():
assert math_functions.subtract(5, 3) == 2
assert math_functions.subtract(0, 0) == 0
assert math_functions.subtract(-1, -1) == 0
pytest를 사용하여 이러한 테스트를 실행하려면 터미널에서 이러한 파일이 있는 디렉토리로 이동하여 다음을 실행하세요.
pytest
- 출력 :
"Nose"는 Python에서 인기 있는 테스트 프레임워크로, 주로 단위 테스트를 작성하는 데 사용됩니다. Nose는 Python의 내장된 unittest 모듈의 기능을 확장하는 테스트 러너입니다. 테스트를 작성하기 위한 더 간단한 구문을 제공하고 테스트 검색, 병렬 테스트 실행 및 플러그인 지원을 위한 추가 기능을 제공합니다.
Nose 설치
pip install nose
이제 nose를 사용하여 단위 테스트를 수행하려면 main.py 라는 파일을 만들고 다음 테스트 코드를 작성합니다.
# main.py
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 3 - 1 == 2
이 프로그램을 실행하려면 다음 명령을 작성합니다.
nosetests main.py
- 출력 :
nose를 사용한 Python 단위 테스트
Doctest 모듈은 docstring 내에서 대화형 Python 세션 형태로 테스트를 작성한 다음 해당 테스트를 자동으로 실행하여 코드가 예상대로 작동하는지 확인하는 데 사용됩니다. Doctest 모듈은 대화형 셸 명령처럼 보이는 docstring의 패턴을 찾습니다.
이제 main.py라는 이름의 파일을 만들고 docstring을 이용해 테스트 코드를 생성하겠습니다.
# main.py
def add(a, b):
"""
Function to add two numbers.
>>> add(2, 3)
5
>>> add(-1, 1)
0
"""
return a + b
def subtract(a, b):
"""
Function to subtract two numbers.
>>> subtract(5, 2)
3
>>> subtract(10, 5)
4
"""
return a - b
프로그램을 실행하려면 main.py 파일이 있는 같은 디렉토리에 있는 터미널에 다음 명령을 작성합니다.
python -m doctest main.py
- 출력 :
doctest를 사용한 Python 단위 테스트
어설션은 알려진 응답과 출력을 비교하는 것에 불과합니다. 즉, 위 코드에서 우리는 10, 20, 30이라는 3개의 값을 포함하는 리스트를 전달했고, 그 곱셈 결과가 6000이라는 것을 알고 있습니다. 따라서 코드의 마지막 단계로 어설션 코드를 작성하게 될 것이고, 위 코드는 assertEqual을 도출해내고 확실히 6000을 출력할 것이므로 테스트 케이스는 통과합니다.
unittest에는 변수의 값, 유형 및 존재를 단언하는 많은 메서드가 있습니다. 단언을 작성하는 데 일반적으로 사용되는 메서드 중 일부는 다음과 같습니다.
Method | Checks that |
---|---|
assertEqual(a,b) | a==b |
assertNotEqual(a,b) | a != b |
assertTrue(x) bool(x) | is True |
assertFalse(x) | bool(x) is False |
assertIs(a,b) | a is b |
assertIs(a,b) | a is b |
assertIsNot(a, b) | a is not b |
assertIsNone(x) | x is None |
assertIsNotNone(x) | x is not None |
assertIn(a, b) | a in b |
assertNotIn(a, b) | a not in b |
assertIsInstance(a, b) | isinstance(a, b) |
assertNotIsInstance(a, b) | not isinstance(a, b) |
한글로 풀이하면 다음을 참고하시오
방법 | 설명 |
---|---|
.a, b와 같음을 주장합니다. | a 와 같은지 확인합니다 . b표현식과 유사합니다 .a == b |
.참(x)를 주장합니다. | 의 부울 값이 x True이고 bool(x) is True.과 동일하다고 주장합니다. |
.a, b인스턴스임을 주장합니다. | 표현식과 유사하게 a 클래스의 인스턴스임을 주장합니다 .bisinstance(a, b) |
.assertIsNone(x) | None이 되도록 보장합니다. 이는 x 표현식과 유사합니다 x is None. |
.거짓을 주장하다(x) | 와 유사하게 부울 값이 x False임을 주장합니다 bool(x) is False. |
.assertIs(a, b) | a 와 동일한 지 확인합니다 . 이는 b표현식과 유사합니다 .a is b |
.a, b에서 주장 | a 의 멤버인지 확인합니다 . b이는 표현식과 유사합니다 .a in b |
- 고정장치는 입력으로 생성된 데이터를 재활용하는 데 사용되는 것입니다.
- 매개변수화는 다른 값을 전달하고 같은 결과를 기대함으로써 동일한 테스트를 여러 번 실행하는 것과 같습니다.
- 예상되는 실패 처리, 통합 테스트 작성, 여러 환경에서의 테스트 등 다양한 시나리오를 다루어야 합니다.
아래 예는 잘못된 데이터 유형에 대한 테스트를 작성하는 방법을 보여줍니다.
import unittest
class TestSumDifferentPatterns(unittest.TestCase):
def test_list_tuple_values(self):
# Summation of numbers present
# in a tuple value
data = (10*2, 200*2)
result = sum(data)
self.assertEqual(result, 600)
def test_bad_data_type(self):
data = "alpha value passed instead of numeric"
with self.assertRaises(TypeError):
result = sum(data)
if __name__ == '__main__':
unittest.main()
- 출력:
.F
================================================= =====================
FAIL: test_list_tuple_values (__main__.TestSumDifferentPatterns)
Traceback (most recent call last):
File "......py", 10번째 줄, test_list_tuple_values에서
self.assertEqual(result, 600)
AssertionError: 420 != 600
------------------------------------- -------
Ran 2 tests in 0.001s
FAILED (failures=1)
Continuous Integration/Continuous Deployment 도구를 사용할 수 있습니다. 이 도구는 테스트를 실행하고, 컴파일하고, 게시하고, 프로덕션에 배포하는 데 도움이 됩니다.
https://travis-ci.com/ 은 Python과 잘 작동하는 오픈 소스 프로젝트 중 하나입니다. 사이트에 로그인하여 아래 내용으로 travis.yml을 만듭니다.
language: python python:<Include the versions as 2.7 or 3.7 whichever required>
install:
– pip install -r <your requirements file>
script:
– python -m unittest discover
위 파일은 "Travis CI"에게 이 파일을 조사하고, 주어진 Python 버전에 대해 요구 사항 파일에 명시된 대로 필요한 패키지를 설치하여 테스트 사례를 테스트하고, 마지막으로 아래 명령을 실행하여 테스트를 실행하도록 지시합니다.
python -m unittest discover
결과는 웹 사이트에 로그인해서 확인 가능합니다. (Results are on the website against your credential.)
단위 테스트는 우리가 작성한 코드를 테스트할 때 중요한 방법입니다. 테스트를 통해 코드가 제대로 작동하는지 확인할 수 있으므로 중요한 프로세스입니다. 이 글에서는 Python 에서 단위 테스트를 위해 Pytest를 사용하는 방법을 살펴보겠습니다 .
단위 테스트를 위해 Pytest를 사용하려면 먼저 설치해야 합니다. 명령 프롬프트에 다음 명령을 작성하여 Pytest를 설치할 수 있습니다.
pip install pytest
pytest가 올바르게 설치되었는지 확인하려면 명령 프롬프트에 다음 명령을 입력하면 됩니다.
pytest --version
이러한 명령이 Pytest의 버전을 출력하면 Pytest가 올바르게 설치되었다고 할 수 있습니다. 그렇지 않으면 패키지를 설치하는 동안 문제가 있을 수 있습니다.
모듈을 테스트하기 위해 특정 테스트 파일을 만들 때, 'Pytest' 명령을 입력하여 명령 프롬프트에서 테스트를 실행할 수 있습니다. 하지만 이를 위해서는 현재 작업 디렉토리가 테스트 파일이 저장된 디렉토리여야 합니다. 'Pytest' 명령을 실행하면(테스트 파일이 저장된 디렉토리에서), 해당 디렉토리와 하위 디렉토리에 있는 테스트 파일을 스스로 감지합니다.
이 테스트 파일 감지 메커니즘이 작동하려면 Pytest에서 테스트 파일의 이름을 지정하는 규칙이 있습니다. Pytest의 테스트 파일은 'test_'로 시작하거나 '_test'로 끝나야 합니다. 예를 들어 Pytest가 테스트 파일을 감지하려면 'test_file' 또는 'file_test'라는 이름이 유효합니다. 테스트 파일이 이러한 조건을 따르지 않으면 Pytest는 해당 테스트를 무시하고 실행하지 않습니다.
또한, 테스트 파일의 테스트 함수/메서드는 탐지를 위한 몇 가지 명명 조건이 있습니다. 테스트 함수/메서드의 이름은 'test_' 또는 'test'로 시작해야 합니다. 예를 들어, 'test_function' 또는 'testmethod'는 테스트 함수/메서드의 유효한 이름입니다. 테스트 클래스를 만드는 경우, 이름을 'Test' 또는 'Test_'로 시작해야 합니다.
이제, 'area' 모듈을 Pytest로 테스트해야 한다고 가정해 보겠습니다. 우리는 나중에 테스트 목적으로 가져올 app.py 파일을 만들고 있습니다. 다음은 우리가 테스트해야 할 'area' 모듈입니다.
'''area module'''
def circle(radius):
return 3.14 * radius ** 2
def square(side):
return side ** 2
def rectangle(length, breadth):
return length * breadth
def parallelogram(base, height):
return base * height
def triangle(base, height):
return 1/2 * (base * height)
이제 area.py 내부의 area 모듈을 테스트하기 위해 테스트 파일을 만들 것입니다. 이 예에서는 'test_area' 파일을 만들 것입니다. 이 이름은 설명적이고 area 모듈을 테스트하기 위한 테스트 파일이라는 것을 나타냅니다.
그 다음에는 테스트 함수와 테스트 케이스를 작성하는 것으로 시작하겠습니다. 단위 테스트를 하려면 집합 테스트 클래스를 만들어 테스트를 그룹화하거나 테스트에 대해 다른 함수를 만들 수 있습니다. 이 경우 테스트 클래스를 만드는 것을 고려해 보겠습니다.
import area
'''test_area file'''
class Test_Area:
def test_circle(self):
assert area.circle(14) == 615.44
def test_square(self):
assert area.square(4) == 16
def test_rectangle(self):
assert area.rectangle(6, 9) == 54
def test_parallelogram(self):
assert area.parallelogram(7, 5) == 35
def test_triangle(self):
assert area.triangle(12, 10) == 60
이제 이 테스트를 실행하기 위해 터미널에 'pytest' 명령을 입력합니다. 아래와 같이
pytest
- 출력
- 테스트 결과
위의 테스트 파일에서 우리는 모듈의 각 함수에 대해 하나의 테스트 케이스만 추가했습니다. 필요에 따라 더 많은 테스트 케이스를 추가할 수 있습니다. 테스트 케이스가 복잡할수록 테스트의 완벽성이 높아집니다.
이제 테스트 케이스에 실패했을 때 무슨 일이 일어나는지 살펴보겠습니다. area 모듈을 작성하는 area.py 를 테스트 케이스에 실패하도록 변경합니다. 'area' 모듈에서 circle 함수의 반환 문장을 '3.14 * radius ** 2'에서 '3.14 * radius'로 변경했습니다. 즉, '????r2'에서 '????r'로 변경했습니다. 이로 인해 이제 테스트 케이스에 실패하게 됩니다.
'''area module'''
def circle(radius):
return 3.14 * radius
def square(side):
return side ** 2
def rectangle(length, breadth):
return length * breadth
def parallelogram(base, height):
return base * height
def triangle(base, height):
return 1/2 * (base * height)
명령 프롬프트에서 다음 명령을 실행합니다.
pytest
- 출력 :
테스트 결과
위의 출력에서 Pytest가 5개 항목, 즉 테스트 파일 'test_area'에서 정의한 5개 테스트 함수를 수집한 것을 볼 수 있습니다.그런 다음 테스트 파일 이름, 즉 'test_area.py'를 볼 수 있으며 그 뒤에 빨간색 'F'와 4개의 녹색 점이 있습니다.빨간색 'F'는 실패한 테스트를 의미합니다.다른 4개의 녹색 점은 4개의 테스트가 통과했음을 의미합니다.그 후 Pytest는 실패한 테스트, 즉 메서드 'test_circle'을 보여줍니다.그런 다음 어설션 오류를 보여주는 테스트 요약을 볼 수 있습니다.마지막으로 통과한 테스트 수와 실패한 테스트 수, 해당 테스트를 실행하는 데 걸린 시간을 볼 수 있습니다.
Prerequisite: Python | Unit Test Objects Patching
단위 테스트는 소프트웨어의 가장 작은 테스트 가능한 부분을 테스트하는 소프트웨어 테스트의 첫 번째 수준입니다. 이는 소프트웨어의 각 단위가 설계대로 수행되는지 확인하는 데 사용됩니다. 단위 테스트 프레임워크는 파이썬의 xUnit 스타일 프레임워크입니다. "Mock을 이용하여 웹 크롤러를 멋지게 시험하는 방법"에 대해 자세히 알아보기 전에 이에 대한 몇 가지 기본 사항을 이해해 보겠습니다.
Mock은 unittest 모듈 의 하위 모듈(클래스)입니다 . mock 모듈을 사용하면 테스트하는 전체 시스템의 특정 부분을 mock 객체로 대체할 수 있습니다.
-
수행할 단계:
- unittest.mock 모듈 에서 모의 클래스를 가져옵니다 .
- Mock 클래스 의 인스턴스를 생성합니다 .
- 모의 객체의 메서드를 설정합니다.
- 결과 출력
-
예:
다른 파이썬 클래스를 모방하여 모의를 이해해 보겠습니다. 이 예에서 우리는 모의된 클래스에서 호출된 메서드와 그 메서드에 전달된 매개변수를 볼 것입니다.
# importing mock from unittest.mock module
from unittest.mock import Mock
# defining instance of our mock
our_mock = Mock()
# defining mock object’s __str__ method
our_mock.__str__ = Mock(return_value='GeeksforGeeks Mocking Example')
# executing str function for output
print(str(our_mock))
- 출력:
GeeksforGeeks Mocking Example