UnitTest 프레임 워크-Doctest API

doctest API는 docstring에서 대화 형 예제를 저장하는 데 사용되는 다음 두 컨테이너 클래스를 중심으로 회전합니다.

  • Example − 예상되는 출력과 쌍을 이루는 단일 Python 문.

  • DocTest − 일반적으로 단일 독 스트링 또는 텍스트 파일에서 추출한 예제 모음.

다음 추가 처리 클래스는 doctest 예제를 찾고, 구문 분석하고, 실행하고 확인하기 위해 정의됩니다.

  • DocTestFinder − 주어진 모듈에서 모든 독 스트링을 찾고 DocTestParser를 사용하여 대화 형 예제를 포함하는 모든 독 스트링에서 DocTest를 만듭니다.

  • DocTestParser − 문자열 (예 : 객체의 독 스트링)에서 doctest 객체를 생성합니다.

  • DocTestRunner − doctest에서 예제를 실행하고 OutputChecker를 사용하여 출력을 확인합니다.

  • OutputChecker − doctest 예제의 실제 출력을 예상 출력과 비교하고 일치하는지 여부를 결정합니다.

DocTestFinder 클래스

그것은 독 스트링과 포함 된 객체의 독 스트링에서 주어진 객체와 관련된 독 테스트를 추출하는 데 사용되는 처리 클래스입니다. Doctest는 현재 모듈, 함수, 클래스, 메서드, 정적 메서드, 클래스 메서드 및 속성과 같은 개체 유형에서 추출 할 수 있습니다.

이 클래스는 find () 메서드를 정의합니다. 객체의 독 스트링 또는 포함 된 객체의 독 스트링에 의해 정의 된 DocTest의 목록을 반환합니다 .

DocTestParser 클래스

문자열에서 대화 형 예제를 추출하고이를 사용하여 DocTest 개체를 만드는 데 사용되는 처리 클래스입니다. 이 클래스는 다음 메서드를 정의합니다-

  • get_doctest() − 주어진 문자열에서 모든 doctest 예제를 추출하여 DocTest 목적.

  • get_examples(string[, name]) − 주어진 문자열에서 모든 doctest 예제를 추출하고 목록으로 반환합니다. Example사물. 줄 번호는 0부터 시작합니다. 선택적 인수 이름은이 문자열을 식별하는 이름이며 오류 메시지에만 사용됩니다.

  • parse(string[, name]) − 주어진 문자열을 예제와 중간 텍스트로 나누고 대체 목록으로 반환 Examples및 문자열. 줄 번호Examples0부터 시작합니다. 선택적 인수 이름은이 문자열을 식별하는 이름이며 오류 메시지에만 사용됩니다.

DocTestRunner 클래스

이것은 DocTest에서 대화 형 예제를 실행하고 확인하는 데 사용되는 처리 클래스입니다. 다음 방법이 정의되어 있습니다-

report_start ()

테스트 실행기가 주어진 예제를 처리하려고한다고보고합니다. 이 메서드는 다음의 하위 클래스를 허용하기 위해 제공됩니다.DocTestRunner출력을 사용자 정의합니다. 직접 호출해서는 안됩니다.

report_success ()

주어진 예제가 성공적으로 실행되었다고보고하십시오. 이 메소드는 DocTestRunner의 서브 클래스가 출력을 사용자 정의 할 수 있도록 제공됩니다. 직접 호출해서는 안됩니다.

report_failure ()

주어진 예가 실패했다고보고하십시오. 이 메서드는 다음의 하위 클래스를 허용하기 위해 제공됩니다.DocTestRunner출력을 사용자 정의합니다. 직접 호출해서는 안됩니다.

report_unexpected_exception ()

주어진 예제에서 예기치 않은 예외가 발생했다고보고합니다. 이 메소드는 DocTestRunner의 서브 클래스가 출력을 사용자 정의 할 수 있도록 제공됩니다 . 직접 호출해서는 안됩니다.

실행 (테스트)

테스트 (DocTest 객체) 에서 예제를 실행하고 writer 함수 out을 사용하여 결과를 표시합니다 .

요약 ([verbose])

이 DocTestRunner에 의해 실행 된 모든 테스트 케이스의 요약을 인쇄하고 명명 된 튜플 TestResults (실패, 시도)를 반환합니다 . 선택적 verbose 인수는 요약의 세부 사항을 제어합니다. 자세한 정도를 지정하지 않으면 DocTestRunner의 자세한 정도가 사용됩니다.

OutputChecker 클래스

이 클래스는 doctest 예제의 실제 출력이 예상 출력과 일치하는지 확인하는 데 사용됩니다.

다음 메서드는이 클래스에 정의되어 있습니다-

check_output ()

반환 True예제의 실제 출력 ( got )이 예상 출력 ( want ) 과 일치하는 경우 . 이러한 문자열은 동일한 경우 항상 일치하는 것으로 간주됩니다. 그러나 테스트 실행기가 사용하는 옵션 플래그에 따라 정확하지 않은 몇 가지 일치 유형도 가능합니다. 옵션 플래그에 대한 자세한 내용은 옵션 플래그 및 지시문 섹션을 참조하십시오 .

output_difference ()

주어진 예제 ( example ) 의 예상 출력 과 실제 출력 ( got ) 의 차이점을 설명하는 문자열을 반환합니다 .

Unittest와 DocTest 통합

doctest 모듈은 doctest를 포함하는 텍스트 파일 및 모듈에서 단위 테스트 테스트 스위트를 만드는 데 사용할 수있는 두 가지 기능을 제공합니다. unittest 테스트 검색과 통합하려면 테스트 모듈에 load_tests () 함수를 포함합니다.

import unittest
import doctest
import doctestexample

def load_tests(loader, tests, ignore):
   tests.addTests(doctest.DocTestSuite(doctestexample))
   return tests

unittest와 doctest의 테스트의 결합 된 TestSuite가 형성되며 이제 unittest 모듈의 main () 메서드 또는 run () 메서드로 실행할 수 있습니다.

다음은 생성을위한 두 가지 주요 기능입니다. unittest.TestSuite doctests와 함께 텍스트 파일 및 모듈의 인스턴스-

doctest.DocFileSuite ()

doctest 테스트를 하나 이상의 텍스트 파일에서 unittest.TestSuite. 반환 된 unittest.TestSuite는 unittest 프레임 워크에 의해 실행되며 각 파일에서 대화 형 예제를 실행합니다. 파일의 예제 중 하나라도 실패하면 합성 된 단위 테스트가 실패하고failureException 테스트를 포함하는 파일의 이름과 (때로는 대략적인) 줄 번호를 보여주는 예외가 발생합니다.

doctest.DocTestSuite ()

모듈에 대한 doctest 테스트를 unittest.TestSuite.

반환 된 unittest.TestSuite는 unittest 프레임 워크에 의해 실행되고 모듈에서 각 doctest를 실행합니다. doctest 중 하나라도 실패하면 합성 된 단위 테스트가 실패하고failureException 테스트를 포함하는 파일의 이름과 (때로는 대략적인) 줄 번호를 보여주는 예외가 발생합니다.

내부적으로 DocTestSuite ()는 unittest.TestSuite doctest.DocTestCase 인스턴스 중, DocTestCase는 unittest.TestCase의 하위 클래스입니다.

마찬가지로 DocFileSuite ()는 doctest.DocFileCase 인스턴스에서 unittest.TestSuite를 생성하고 DocFileCase는 DocTestCase의 하위 클래스입니다.

따라서 unittest.TestSuite를 생성하는 두 가지 방법 모두 DocTestCase의 인스턴스를 실행합니다. doctest 함수를 직접 실행할 때 옵션 플래그를 doctest 함수에 전달하여 사용중인 doctest 옵션을 직접 제어 할 수 있습니다.

그러나 단위 테스트 프레임 워크를 작성하는 경우 unittest는 궁극적으로 테스트가 실행되는시기와 방법을 제어합니다. 프레임 워크 작성자는 일반적으로 doctest보고 옵션 (예 : 명령 줄 옵션에 의해 지정됨)을 제어하려고하지만 unittest를 통해 doctest 테스트 실행기에 옵션을 전달할 방법이 없습니다.