クラスまたは関数の宣言の直後に続くPythondocstringは、__doc__
属性に配置されます。
質問:関数の後半で発生する追加の「内部」docstringをどのように抽出しますか?
更新:このようなリテラルステートメントは、コンパイラーによって省略されます。おそらくAST経由でそれら(およびそれらの行番号)に到達できますか?
なぜ私は尋ねるのですか?
私は、そのような「内部」ドックストリングを使用して、アジャイルシナリオのGiven / When / Thenセクションを描写する(完全に焼き付けられていない)アイデアを持っています。
def test_adding():
"""Scenario: Adding two numbers"""
adder = Adder()
"""When I add 2 and 3"""
result = adder.add(2, 3)
"""Then the result is 5"""
assert result == 5
docstringを抽出することにより、テスト実行フレームワークは次のような出力を生成できます。
Scenario: Adding two numbers
When I add 2 and 3 (PASS)
Then the result is 5 (FAIL)
AssertionError Traceback
...
これは、 Behave、Freshen、Lettuce、PyCukesで採用されているアプローチよりも簡潔であり、ステップごとに個別の関数を定義する必要があると思います。ステップのテキストを関数名()として繰り返す必要はありません@When("I add numbers") def add_numbers()
。ただし、単純な単体テストとは異なり、docstringは、参照用にビジネスで読み取り可能なシナリオを印刷する機能を追加します。