문제

다음과 같은 문서를 쓰고 싶습니다.

"""
>>> print a.string()
          foo : a
          bar : b
         date : <I don't care about the date output>
          baz : c
"""

이것을 할 방법이 있습니까? UnitTest로 전환하는 것이 더 합리적이라고 생각하지만 DocTest에서 테스트에 맞지 않아야 할 다양한 출력을 지정할 수 있는지 궁금합니다.

감사!

도움이 되었습니까?

해결책

와 함께 doctest.ELLIPSIS, 당신이 사용할 수있는 ... "여기서 문자열 일치"를 의미합니다. 당신은 설정할 수 있습니다 doctest 하나의 테스트 사례에 대해 활성화하기 위해 DocTest 지침이있는 옵션 : 온라인 문서 이다:

>>> print range(20) # doctest:+ELLIPSIS
[0, 1, ..., 18, 19]

DocTest 옵션을 전체적으로 활성화하려면 optionflags= 사용하는 DocTest 기능에 대한 인수, 예를 들어 doctest.testfile. (사용하여 여러 옵션 플래그를 전달할 수 있습니다. | 비트 또는 비트 또는 연산자).

다른 팁

"전체 라인을 무시할 수있는 방법"에 대한 질문에 응답하면 : 그렇습니다. "..."도 계속해서 보이는 것도 전체 출력을 무시하기가 어렵습니다. 예제를 완전히 건너 뛰려면 "#doctest : +skip"을 사용할 수 있지만 부작용에 의존하는 경우 작동하지 않습니다. 만약 너라면 진짜 이를 수행해야합니다. DocTest 모듈 자체를 원숭이 패치 할 수 있다고 생각하지만 특별히 권장하지는 않습니다.

>>> import doctest
>>> doctest.ELLIPSIS_MARKER = '-etc-'
>>> print 12 # doctest: +ELLIPSIS
-etc-

(이 테스트는 통과합니다.)

또는 stdout 및/또는 stderr를 일시적으로 억제 할 수 있습니다.

>>> # Suppress stdout
>>> import sys
>>> class DevNull:
...     def noop(*args, **kwargs): pass
...     close = write = flush = writelines = noop
>>> sys.stdout = DevNull()
>>> # Run a test and ignore output (but we need its side effects)
>>> print 12 # NOTE: stdout is suppressed!
>>> # Restore stdout
>>> sys.stdout = sys.__stdout__

(이 테스트도 통과합니다.)

전체 라인을 무시하는 것은 약간 까다 롭습니다. 여기:

"""
>>> do_your_thing() #doctest:+ELLIPSIS
...
"""

트리플 도트는 라인 연속으로 해석되며 구문 오류가 발생합니다.

전체 라인을 무시하려면 다음과 같은 것이 필요합니다.

"""
>>> sys.stdout.write('skip from here '); do_your_thing() #doctest:+ELLIPSIS
skip from here ...
"""

불필요한 반환 값을 변수에 단순히 할당하는 것이 더 쉽다는 것을 알았습니다.

>>> _ = do_something()
>>> check_something()
True

기능 전후에 튜플을 쓸 수 있습니다 (Mark Horvath의 답변에서 영감을 얻은 해킹) :

def foo():
    """
    >>> ();foo();() # doctest: +ELLIPSIS
    (...)
    """
    print "Hello world"
    return "Hello world"

Python DocTest에서 선의 시작 부분에 타원을 가질 수 있습니까? 추가 문자열을 타원체로 사용하는 사용자 정의 출력 검사기를 만드는 방법을 설명합니다. 이렇게하면 여전히 '...'를 사용하는 동안 다음을 쓸 수 있습니다.

def foo():
  """
  >>> foo() # doctest: +ELLIPSIS
  [...] world
  """
  print "hello world"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top