교활하게 하다

doctest


Doctest는 표준 Python 통역기 쉘에서 출력한 결과를 바탕으로 테스트를 쉽게 생성할 수 있도록 Python 프로그래밍 언어의 표준 라이브러리에 포함된 모듈이다.

구현 세부 사항

Doctest는 다음과 같은 Python 기능을 혁신적으로[1] 활용한다.[2]

  • 문서철
  • Python 대화형 셸(명령줄과 포함된 유휴 응용프로그램 모두)
  • 파이톤 자기성찰

파이톤 셸을 사용할 때, 1차 프롬프트: >>>>> 에 이어 새로운 명령이 뒤따른다.보조 프롬프트: ...는 여러 줄에서 명령을 계속할 때 사용되며, 명령 실행 결과는 다음 줄에서 예상한다.빈 줄 또는 기본 프롬프트로 시작하는 다른 줄은 명령의 출력이 끝나는 것으로 보인다.

문서 문자열에서 이러한 프롬프트의 순서를 찾고 추출된 명령을 다시 실행하며 문서 문자열 테스트 예에 주어진 명령의 출력과 대조하여 출력을 점검한다.

Doctest를 실행할 때 기본 동작은 테스트가 통과될 때 출력을 표시하지 않는 것이다.이것은 가장 유능한 주자에 대한 선택사항으로 수정될 수 있다.또한 Python 유닛 테스트 모듈과 통합되어 표준 단위 테스트 케이스로 Doctest를 실행할 수 있다.테스트 사례 주자는 테스트를 실행할 때 합격 및 불합격과 같은 테스트 통계 보고와 같은 더 많은 옵션을 허용한다.

리터럴 프로그래밍 및 작업

Doctest는 Python 프로그램을 서술 텍스트에 포함시키는 것을 허용하지 않지만, 문서 스트링이 다른 텍스트를 포함할 수 있는 문서 스트링에 검증 가능한 예를 포함하도록 허용한다.다시 프로그램 파일에서 문서를 추출하여 HTML이나 PDF와 같은 다른 형식으로 문서를 생성할 수 있다.프로그램 파일은 문서, 테스트, 코드 및 코드를 쉽게 검증할 수 있도록 만들 수 있다.이를 통해 코드, 테스트 및 문서화가 함께 진화할 수 있다.

예제별 라이브러리 문서화

Doctests는 API가 어떻게 사용되는지를 보여줌으로써 도서관에 대한 소개를 제공하는데 매우 적합하다.

파이썬의 인터랙티브 통역 출력에 기초해, 본문을 라이브러리를 연습하는 시험과 섞어서 예상 결과를 나타낼 수 있다.

예

예제 1은 문서 문자열에 서술적 텍스트가 시험 가능한 예와 함께 배치될 수 있는 방법을 보여준다.두 번째 예에서는 설명과 함께 더 많은 Doctest의 특징을 보여준다.예제 3은 파일이 실행될 때 파일의 모든 문서를 실행하도록 설정되었지만 모듈로 가져올 때 테스트는 실행되지 않는다.

예제 1: 함수의 문서 문자열에 포함된 명령어

반항하다 list_to_0_index(lst):     """""다음의 문제에 대한 해결책: https://rgrig.blogspot.com/2005/11/writing-readable-code.html  '목록이 주어지면 lst, 각 원소에 대해 0-색인을 표시한다. 처음 했을 때.그래서 목록 x = [0, 1, 4, 2, 4, 1, 0, 2]는 y = [0, 1, 2, 3, 2, 2, 1, 0, 3]로 변환됨.에 주목하라. x[i] = x[i]가 있다.모든 프로그래밍 언어 및 데이터 사용 원하는 표현.'  >>> x = [0, 1, 4, 2, 4, 1, 0, 2] >>> list_to_0_index(x) [0, 1, 2, 3, 2, 1, 0, 3] >>> """      돌아오다 [lst.색인을 달다(i) 을 위해 i 에 lst] 

예제 2: README.txt 파일에 포함된 문서

==========================================================================================================================================Python의 DocFileSuite() 함수를 참조하십시오.보통 README 파일은 모듈의 API를 이렇게 설명하는데, <<>>>< a = 1 >>>><b = 2 >><<<<<>><<<<<>>><<<<<>>><<<<<<>>><<<<<<<<>>>><<<<<<<<<<<<<>>>>>>>>><<<<<<<<<<<<<<<<<<특별한 옵션은 당신의 예에 대해 다소 모호하게 할 수 있게 해준다: >> o = 객체()> o # doctest: +ELLIPSIS <객체 0x...> 예외도 아주 잘 테스트할 수 있다: >>>> x 트레이스백 (가장 최근의 통화 마지막): ...NameError: 이름 'x'가 정의되지 않음

예 3: unique_words.파이를 치다

이 예는 또한 Python String을 사용하여 파일에서 함수에 대한 입력을 시뮬레이션한다.IO 모듈

반항하다 고유_words(페이지를 매기다):     ''텍스트의 줄 목록에서 고유한 단어 집합을 반환하십시오.  예:  >> 끈에서 >IO 가져오기 문자열IO >>> fileText = """고양이는 매트 위에 앉았다. 돗자리는 고양이 위에 있었다. …한마리 물고기 두마리 물고기 붉은 물고기 …푸른 생선 …이 물고기는 노란색 차를 가지고 있다. …이 물고기는 노란 별을 가지고 있다." >>> 파일 = 끈IO(fileText) >>> 페이지 = file.readlines() >>> 단어 = 고유_words(페이지) >>>>인쇄 분류(list(words) ["이것", "a", "파란색", "카", "고양이", "고양이", "고기", "has", "mat", "온", "온두르", "원", "빨간", "sat", "별", "더", "투" " was," "yellow"] >>> '''      돌아오다 세트(단어 을 위해 선을 긋다 에 페이지를 매기다 을 위해 단어 에 선을 긋다.갈라지다())  반항하다 _시험():     수입하다 교활하게 하다     교활하게 하다.시험 기법()  만일 __name__ == "__main__":     _시험() 

Doctest 및 문서 생성기

Epydoc 및 Docutils reStructured의 EpyText 형식 모두텍스트 형식은 문서 문자열 내의 문서 섹션 표시를 지원한다.

다른 프로그래밍 언어로 구현

C++에서, 가장 중요한 프레임워크는 개념의 가능한 가장 가까운 구현이다. - 시험은 최소 오버헤드로 생산 코드에 직접 작성될 수 있으며, 2진수에서 분리할 수 있는 선택사항이다.[3]

엑유닛.DocTest Elixir 라이브러리는 Doctest와 유사한 기능을 구현한다.[4]

Haskell을 위한 Doctest의 구현.[5]

Elm에서 문서화 테스트 작성.[6]

러스트에서 문서화 테스트 작성.[7]

Elixir에서 문서화 테스트 작성.[8]

byexample[9] Markdown, reStructured 내의 몇 가지 인기 프로그래밍 언어(예: Python, Ruby, Shell, JavaScript, C/C++, Java, Go, Rust)에 대한 문서 작성 지원텍스트 및 기타 텍스트 문서.

참조

  • Peters, Tim (1999-03-06). "docstring-driven testing". Usenet: 000001be679b$0b263e00$a99e2299@tim.
  • "Development Tools – doctest". Python Library Reference. 2008-12-18.