18

クラスメソッドにdocstringを含むPythonモジュールがあり、モジュールdocstringに実際の例があります。違いは、method-docstringは完全に再現可能なテストになるように注意深く作成されているのに対し、実際の例はLinuxシェルからの履歴のコピーアンドペーストであり、Pythonインタープリターを呼び出しただけです。

例えば

"""
Real-world example:

# python2.5
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

class SomeClass(object):
    def someMethod(self):
        """
        >>> 1 == 1
        True
        """

でdoctestを実行したいのですSomeClass.someMethodが、モジュールのdocstringでは実行しません。

Doctestの+SKIPディレクティブは行ごとにのみ機能します。つまり、実際の例に数十行を追加することになります。ぶさいくな!

doctestにブロック全体をスキップさせる方法はありますか?<!-- ... -->HTMLに少し似ていますか?

4

4 に答える 4

22

例を関数でラップしてから、関数呼び出しをスキップします。

"""
>>> def example():
...    from packagename import module
...    module.show_real_world_usage()
...
>>> example() # doctest: +SKIP
'Hello world!'
"""
于 2011-10-01T19:09:20.273 に答える
7

私の解決策は、doctestにスキップさせたい3文字>>>とリーダーをトリミングして、2文字にすることでした。...

それで

"""
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

になった

"""
>> from packagename import module
>> module.show_real_world_usage()
'Hello world!'
"""

Epydocは、これをdoctestほどうまく表示しませんが、私はこれで生きることができます。ただし、doctestのskip-until-further-noticeディレクティブは歓迎されます。

于 2009-11-27T16:00:58.547 に答える
2

決して実際のdoctestでない場合は、値を変数に割り当てることができます。例えば、

example_usage = """
Real-world example:

# python2.5
...
"""

その「テスト」は評価されません。

__example_usage__スクリプトのコンテキスト内で使用される変数ではなく、「魔法の」変数であることを明確にするために、(または二重アンダースコアで囲まれた他の何か)を使用する方がよい場合があります。

于 2009-11-27T14:28:02.693 に答える
2

RobMの回答に基づいて構築された小さな回避策は、次のような>>>で例を開始することにより、表示/フォーマットを保持します。

""" 
>>>
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
"""
于 2019-03-05T11:55:21.837 に答える