4

my function reads from a file, and a doctest needs to be written in a way independent of an absolute path. What's the best way of wrting a doctest? Writing a temp file is expensive and not failproof.

4

2 に答える 2

6

内部使用専用であることを示すために、アンダースコアでマークされたパスを取るパラメーターを使用できます。引数は、非テスト モードでは絶対パスにデフォルト設定する必要があります。名前付きの一時ファイルが解決策であり、withステートメントを使用することでフェイルプルーフになるはずです。

#!/usr/bin/env python3
import doctest
import json
import tempfile

def read_config(_file_path='/etc/myservice.conf'):
    """
    >>> with tempfile.NamedTemporaryFile() as tmpfile:
    ...     tmpfile.write(b'{"myconfig": "myvalue"}') and True
    ...     tmpfile.flush()
    ...     read_config(_file_path=tmpfile.name)
    True
    {'myconfig': 'myvalue'}
    """
    with open(_file_path, 'r') as f:
        return json.load(f)

# Self-test
if doctest.testmod()[0]:
    exit(1)

Python 2.x の場合、doctest は異なります。

#!/usr/bin/env python2
import doctest
import json
import tempfile

def read_config(_file_path='/etc/myservice.conf'):
    """
    >>> with tempfile.NamedTemporaryFile() as tmpfile:
    ...     tmpfile.write(b'{"myconfig": "myvalue"}') and True
    ...     tmpfile.flush()
    ...     read_config(_file_path=tmpfile.name)
    {u'myconfig': u'myvalue'}
    """
    with open(_file_path, 'r') as f:
        return json.load(f)

# Self-test
if doctest.testmod()[0]:
    exit(1)
于 2016-08-05T06:26:46.807 に答える
1

doctest はモジュールStringIOを使用して、文字列からファイル オブジェクトを提供できます。

于 2013-05-30T08:59:06.420 に答える