Python 단위 테스트 검색

Salman Mehmood 2023년10월10일
Python 단위 테스트 검색

이 기사에서는 단위 테스트와 특정 코드 조각에 대해 실행하는 방법에 대해 설명합니다. 모듈 이름을 자동으로 인식하는 discover 명령의 사용법과 Python에서 작동하지 않는 이유를 배웁니다.

Python에서 discover 명령의 도움으로 unittest 모듈을 사용하여 테스트 모듈 인식

품질을 확인하기 위해 소프트웨어를 만지거나 냄새를 맡거나 느낄 수는 없지만 테스트 도구를 사용하여 테스트할 수 있습니다. 단위 테스트는 애플리케이션의 작은 부분을 인스턴스화하고 다른 부분과 독립적으로 해당 동작을 확인하는 방법입니다.

즉, 코드의 작은 부분을 가져와 작은 기능에서 별도로 테스트합니다. 개발의 이 부분은 종종 건너뛰어 고객이 소프트웨어를 테스트할 때 사용자 경험이 좋지 않게 됩니다.

일반적인 단위 테스트에는 Arrange, Act 및 Assert의 세 단계가 있습니다.

Arrange는 단위 테스트가 개체를 실행하거나 인스턴스화하기 위한 적절한 조건을 만듭니다. Act는 개체에 일부 입력 또는 데이터를 제공하고 Assert는 출력 데이터가 예상한 대로인지 확인합니다.

demo.py라는 새 파일을 만들고 코드 작성을 시작하겠습니다. 두 개의 숫자를 더하고 빼는 두 개의 함수를 만들 것입니다. 이러한 함수는 인수로 정수 또는 float만 허용할 수 있습니다. 그렇지 않으면 TypeError가 발생합니다.

def Add_TWO_NUM(a, b):
    return a + b


def SUB_TWO_NUM(a, b):
    return a - b

이제 unittest가 Python 배포판에 내장되어 있기 때문에 unittest를 사용하여 테스트용 test_functions.py 파일을 생성합니다. 우리는 그것을 설치하기 위해 아무것도 할 필요가 없습니다; 그러나 코드에서 unittest를 가져올 수 있습니다.

여기에서 파일 이름인 functions.py 앞에 추가 접두사 test_를 추가했습니다. 이 test_ 접두사는 unittest가 이것이 단위 테스트 기능이 작성된 파일임을 인식하는 데 도움이 됩니다.

처음에는 보시다시피 unittest 모듈을 가져온 다음 테스트하려는 모듈에서 함수를 가져온 다음 TesstSomeFunctions라는 클래스를 초기화합니다. 테스트 클래스를 작성해야 하는 경우 모든 테스트 함수를 작성하기 전에 테스트 클래스를 작성해야 합니다.

테스트 중이므로 괄호 안에 unittest.TestCase를 지정해야 합니다. 사용자 정의 클래스는 unittest.TestCase에서 파생되어야 합니다. 테스트를 실행하는 것은 unittest가 함수를 호출하는 유일한 방법입니다. 단위 테스트의 경우이며 이 클래스의 모든 함수는 단일 단위 테스트가 됩니다.

Python 스크립트에서 이것을 다른 함수로 정의하고 def 키워드를 작성할 수 있습니다. 그런 다음 test_와 같은 테스트 접두사로 이름을 시작한 다음 우리가 지정할 수 있는 이름으로 시작합니다.

unittest 모듈은 어설션을 제공합니다. unittest를 사용하여 unittest 모듈의 모든 자산을 볼 수 있습니다. 또는 공식 문서의 모든 방법.

assertEqual() 메서드를 사용하여 이 함수가 10을 반환하는지 여부를 확인합니다. 어설션은 함수가 결과 10을 예상한 대로 원하는 결과를 반환한다는 것을 어설션하고 싶다는 것을 나타냅니다.

Add_TWO_NUM() 함수의 인수로 4와 6을 제공합니다. assertEqual() 메서드의 두 번째 인수에서 동일한지 여부를 확인합니다.

test_SUB_TWO_NUM()이라는 다른 함수도 테스트할 것입니다. 프로세스는 동일하지만 이 함수에서는 두 개의 숫자를 빼는 함수를 테스트하고 있습니다. 이제 파일로 내려가 if __name__=='__main__' 줄을 작성하고 unittest.main() 명령을 사용하여 단위 테스트를 실행해야 합니다.

import unittest
from demo import Add_TWO_NUM, SUB_TWO_NUM


class TesstSomeFunctions(unittest.TestCase):
    def test_Add_TWO_NUM(self):
        self.assertEqual(Add_TWO_NUM(4, 6), 10)

    def test_SUB_TWO_NUM(self):
        self.assertEqual(SUB_TWO_NUM(5, 3), 2)


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

이제 두 가지 테스트 케이스가 준비되었으므로 Python 파일을 실행해 보겠습니다. 보시다시피 0.0초 안에 실행된 두 테스트에 대한 정보를 제공했습니다.

이 두 점은 통과한 테스트를 나타냅니다. 테스트를 통과하지 못한 경우 대문자 F가 표시됩니다.

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

파일에서 모듈로 테스트 모듈을 실행하지 않으려면 어떻게 합니까? 글쎄, 당신은 터미널에 명령을 입력하여 그렇게 할 수 있습니다.

python -m unittest test_functions.py

이 명령은 모두 동일하게 작동합니다.

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

더 많은 정보가 필요하면 자세한 내용을 의미하는 v -를 입력하면 각 단위 테스트에 대한 자세한 정보를 얻을 수 있습니다. 어떤 테스트가 가장 좋은지 알려줍니다.

python -m unittest -v test_functions.py

출력:

test_Add_TWO_NUM (test_functions.TesstSomeFunctions) ... ok
test_SUB_TWO_NUM (test_functions.TesstSomeFunctions) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

터미널 discover에서 단위 테스트를 실행하는 세 번째 옵션도 있습니다. 이 명령은 테스트로 시작하는 모든 모듈을 자동으로 검색하므로 모듈 이름을 개별적으로 전달할 필요가 없습니다.

그렇기 때문에 test로 시작하는 모든 모듈의 이름을 지정하는 것이 중요합니다.

python -m unittest discover

출력:

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

테스트 파일 이름이 test로 시작하지 않으면 discover 명령은 이를 일반 Python 파일 또는 모듈로 인식하기 때문에 아무 것도 반환하지 않습니다. unittest 모듈에 대한 자세한 내용은 python.org를 방문하십시오.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Python Unit Test