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.
質問する
1083 次
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 に答える