Python unittest 모듈을 사용한 단위 테스트

좋은 개발자는 철저한 테스트 없이 코드를 배포하지 않습니다. 단위 테스트는 대규모 프로그램의 개별 모듈을 테스트하는 프로세스입니다.

이 기사에서는 Python unittest 모듈을 사용하여 코드의 단위 테스트를 수행하는 방법에 대해 설명합니다. 먼저 테스트 유형이 무엇인지 이해합시다.

테스트에는 수동 테스트와 자동 테스트가 있습니다. 매뉴얼 테스트는 개발이 완료된 후 사람이 수동으로 테스트를 수행하는 테스트 기법입니다. 자동화 테스트는 프로그램이 자동으로 테스트를 수행하고 그 결과를 우리에게 제공하는 테스트 기술입니다.

수동 테스트는 시간이 걸리고 수행하기 어렵다는 것을 이해했을 것입니다. 따라서 개발자는 테스트(자동 테스트)를 수행하기 위한 코드를 작성합니다. 자동 테스트에는 다양한 종류의 테스트가 있습니다. 그들 중 일부는 단위 테스트, 통합 테스트, 엔드 투 엔드 테스트, 스트레스 테스트 등입니다.

테스트의 표준 흐름을 살펴보겠습니다.

  • 코드를 작성하거나 업데이트합니다.
  • 코드에 대한 다양한 사례에 대한 테스트를 작성하거나 업데이트하십시오.
  • 테스트를 실행합니다(수동으로 또는 테스트 러너 사용).
  • 테스트 결과를 참조하십시오. 오류가 있으면 수정하고 단계를 반복합니다.

여기서는 단위 테스팅이라는 가장 필수적이고 기본적인 테스팅 유형에 대해 논의할 것입니다. 더 이상 고민하지 않고 실제 튜토리얼로 들어가 봅시다.

단위 테스트란 무엇입니까?

단위 테스트는 독립적인 코드의 작은 블록을 테스트하는 기술입니다. 작은 블록 코드는 대부분의 경우 함수입니다. 독립이라는 단어는 프로젝트의 다른 코드 부분에 의존하지 않는다는 의미입니다.

문자열이 “koreantech.org”와 같은지 여부를 확인해야 한다고 가정해 보겠습니다. 이를 위해 하나의 인수를 사용하고 “koreantech.org”와 같은지 여부를 반환하는 함수를 작성했습니다.

def is_equal_to_geekflare(string):
	return string == "koreantech.org"

위의 함수는 다른 코드에 종속되지 않습니다. 따라서 다른 입력을 제공하여 독립적으로 테스트할 수 있습니다. 독립적인 코드 조각은 프로젝트 전체에서 사용할 수 있습니다.

단위 테스트의 중요성

일반적으로 독립적인 블록 코드는 프로젝트 전체에서 사용할 수 있습니다. 따라서 잘 작성하고 테스트해야 합니다. 단위 테스트는 이러한 유형의 독립적인 코드 블록을 테스트하는 데 사용되는 테스트입니다. 프로젝트에 단위 테스트를 사용하지 않으면 어떻게 되나요?

  게시하지 않고 TikTok에 비디오를 저장하는 방법

프로젝트 전체에서 사용되는 작은 코드 블록을 테스트하지 않았다고 가정해 보겠습니다. 다른 작은 코드 블록을 사용하는 통합 테스트, 종단 간 테스트 등과 같은 다른 모든 테스트는 실패할 수 있습니다. 이렇게 하면 응용 프로그램이 중단됩니다. 그렇기 때문에 코드의 기본 빌딩 블록을 잘 테스트해야 합니다.

이제 우리는 모든 독립 코드 블록에 대한 단위 테스트 및 서면 단위 테스트의 중요성을 알고 있습니다. 단위 테스트를 수행했기 때문에 통합 테스트, 종단 간 테스트 등과 같은 다른 테스트는 독립적인 코드 블록으로 인해 실패하지 않습니다.

다음 섹션에서는 Python unittest 모듈이 무엇인지, unittest 모듈을 사용하여 Python에서 단위 테스트를 작성하는 방법을 살펴봅니다.

참고: Python 클래스, 모듈 등에 익숙하다고 가정합니다. 클래스, 모듈 등과 같은 Python 중간 개념에 익숙하지 않은 경우 다음 섹션을 이해하기 어려울 수 있습니다.

파이썬 단위 테스트는 무엇입니까?

Python unittest는 Python 코드를 테스트하기 위한 기본 제공 테스트 프레임워크입니다. 테스트 러너가 있어 많은 노력 없이 테스트를 실행할 수 있습니다. 따라서 타사 모듈을 사용하지 않고 테스트를 위해 내장된 unittest 모듈을 사용할 수 있습니다. 그러나 귀하의 요구 사항에 따라 변경됩니다. 내장된 unittest 모듈은 Python에서 테스트를 시작하는 데 좋습니다.

unittest 모듈을 사용하여 Python 코드를 테스트하려면 아래 단계를 따라야 합니다.

#1. 코드를 작성합니다.

#2. unittest 모듈을 가져옵니다.

#삼. test 키워드로 시작하는 파일을 만듭니다. 예를 들어 test_prime.py. test 키워드는 테스트 파일을 식별하는 데 사용됩니다.

#4. unittest.TestCase 클래스를 확장하는 클래스를 만듭니다.

#5. 클래스 내부에 메서드(테스트)를 작성합니다. 각 방법에는 요구 사항에 따라 다른 테스트 사례가 포함되어 있습니다. 테스트 키워드로 시작하는 메서드 이름을 지정해야 합니다.

#6. 테스트를 실행합니다. 다양한 방식으로 테스트를 실행할 수 있습니다.

  • python -m unittest test_filename.py 명령을 실행합니다.
  • python test_filename.py 명령을 사용하여 일반 Python 파일과 같은 테스트 파일을 실행합니다. 이 메서드가 작동하려면 테스트 파일에서 unittest의 기본 메서드를 호출해야 합니다.
  • 마지막으로 검색을 사용합니다. 테스트 파일 이름을 언급하지 않고 python -m unittest discover 명령을 사용하여 테스트를 자동 실행할 수 있습니다. 우리가 따랐던 명명 규칙을 사용하여 테스트를 찾습니다. 따라서 시작 시 test 키워드로 테스트 파일의 이름을 지정해야 합니다.
  TikTok에서 3분 비디오를 얻는 방법

일반적으로 테스트에서는 코드의 출력과 예상 출력을 비교합니다. 따라서 출력을 비교하기 위해 unittest는 다른 방법을 제공합니다. 비교 기능 목록을 찾을 수 있습니다. 여기.

어려움 없이 쉽게 이해할 수 있습니다. 그들은 간단합니다.

그것은 많은 이론입니다. 이제 코딩에 들어가야 합니다.

참고: unittest 모듈에 대한 질문이 있는 경우 다음으로 이동할 수 있습니다. 선적 서류 비치 그리고 당신의 의심을 지우십시오. 더 이상 지체하지 않고 unittest 모듈을 사용합시다.

unittest를 사용한 Python의 단위 테스트

먼저 몇 가지 함수를 작성한 다음 테스트 작성에 집중할 것입니다. 먼저 즐겨 사용하는 코드 편집기에서 폴더를 엽니다. 그리고 utils.py라는 파일을 생성합니다. 파일에 다음 코드를 붙여넣습니다.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

utils.py 파일에는 세 가지 기능이 있습니다. 이제 서로 다른 테스트 케이스로 각 기능을 테스트해야 합니다. 첫 번째 함수 is_prime에 대한 테스트를 작성해 봅시다.

#1. 샘플 폴더에 test_utils.py라는 파일을 utils.py로 만듭니다.

#2. utils 및 unittest 모듈을 가져옵니다.

#삼. unittest.TestCase 클래스를 확장하는 TestUtils라는 이름의 클래스를 만듭니다. 클래스 이름은 무엇이든 될 수 있습니다. 클래스에 의미 있는 이름을 지정하십시오.

#4. 클래스 내에서 self를 인수로 받아들이는 test_is_prime이라는 메서드를 작성합니다.

#5. is_prime에 대한 인수를 사용하여 다른 테스트 사례를 작성하고 출력을 예상 출력과 비교합니다.

#6. 예제 테스트 사례 self.assertFalse(utils.is_prime(1)).

#7. 우리는 위의 경우 is_prime(1)의 출력이 false일 것으로 예상합니다.

#8. 위의 경우와 마찬가지로 테스트 중인 기능에 따라 다른 테스트 사례를 사용합니다.

테스트를 보자.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


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

python filename.py 명령을 사용하여 테스트를 실행하기 위해 모듈 unittest의 기본 메서드를 호출합니다. 이제 테스트를 실행합니다.

  Linux의 Last Light Redux

아래 출력과 유사한 출력이 표시됩니다.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

이제 다른 기능에 대한 테스트 케이스도 작성해 보십시오. 함수에 대한 다양한 사례를 생각하고 이에 대한 테스트를 작성하십시오. 위 클래스에 추가된 다음 테스트를 살펴보십시오.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("koreantech.org"), "Hello, koreantech.org")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

unittest 모듈의 비교 함수 중 일부만 사용했습니다. 전체 목록을 찾을 수 있습니다. 여기.

unittest 모듈을 사용하여 단위 테스트를 작성하는 방법을 배웠습니다. 이제 테스트를 실행하는 다양한 방법을 살펴볼 차례입니다.

unittest를 사용하여 테스트를 실행하는 방법

우리는 이미 위 섹션에서 테스트 케이스를 실행하는 방법을 보았습니다. unittest 모듈을 사용하여 테스트를 실행하는 다른 두 가지 방법을 살펴보겠습니다.

#1. 파일 이름과 unittest 모듈을 사용합니다.

이 방법에서는 unittest 모듈과 파일 이름을 사용하여 테스트를 실행합니다. 테스트를 실행하는 명령은 python -m unittest filename.py입니다. 이 경우 테스트를 실행하는 명령은 python -m unittest test_utils.py입니다.

#2. 발견 방법 사용

unittest 모듈의 discover 메소드를 사용하여 모든 테스트 파일을 자동 감지하고 실행합니다. 테스트 파일을 자동 감지하려면 키워드 test로 시작하는 이름을 지정해야 합니다.

discover 메소드를 사용하여 테스트를 실행하는 명령은 python -m unittest discover입니다. 이 명령은 이름이 test로 시작하는 모든 파일을 감지하고 실행합니다.

결론 👩‍💻

단위 테스트는 프로그래밍 세계의 기본 테스트입니다. 실제 세계에는 다른 많은 테스트가 있습니다. 하나씩 배워보세요. 이 튜토리얼이 unittest 모듈을 사용하여 Python에서 기본 테스트를 작성하는 데 도움이 되기를 바랍니다. pytest, Robot Framework, nose, nose2, slash 등과 같은 타사 라이브러리가 있습니다. 프로젝트 요구 사항에 따라 라이브러리를 탐색할 수 있습니다.

행복한 테스트 😎

Python 인터뷰 질문 및 답변에 관심이 있을 수도 있습니다.