web-dev-qa-db-ja.com

PyCharmでdoctestを実行するにはどうすればよいですか?

PyCharm IDEで、doctestを使用して関数/メソッドを右クリックすると、右クリックメニューにオプションが表示される場合があります: "Run 'Doctest my_function_name'"そして時には右代わりにメニューをクリックすると、ファイル全体を実行するオプションのみが表示されます(doctestとしてではありません)。

「doctestを実行」オプションを提供するタイミングと提供しないタイミングを決定するものは何ですか?それを何らかの方法で強制する方法はありますか?

25
Troy

PyCharmでのモジュール(またはその中のテスト)の実行は、 Run Configuration を介して行われます。モジュールを右クリックすると、PyCharmはそのモジュールの既存のRun Configurationを検索します。構成が見つかった場合(以前の実行、またはConfigurationの手動作成が原因である可能性があります)、PyCharmはその構成の実行のみを提案します。

たとえば、module.pyの構成がdoctestsを実行するために作成された場合、これはmodule.pyを右クリックしたときに表示されるオプションです。ただし、構成が見つからない場合、PyCharmは、モジュールのコードに応じて、さまざまなオプションでモジュールを実行することを提案します(定期的に実行するか、doctests/unittestsを実行します)。 。オプションが選択されると、PyCharmはそれぞれの一時的なRun Configurationを暗黙的に作成します。これ以降、モジュールを右クリックすると、そのモジュール用に作成された構成のみが表示されます。

重要な補足:PyCharmは最大6個の一時ファイルを保存します(つまり、モジュールの実行によって作成されたConfigurationsRun Configurations- "Python"の3つまり、スクリプト、および「Python Tests」の3つです。つまり、moduleA.pymoduleB.pymoduleC.py、次にmoduleD.pyを実行すると、PyCharmの一時的なConfigurationsmoduleB.pymoduleC.py、およびmoduleD.pymoduleA.pyの構成は、明示的に保存しない限り、自動的に削除されます。

この動作は、次のように再現できます。

  1. PyCharmで、新しいPython module: "temp"を作成します

2.以下をモジュールに追加します:

"""
    >>> print 3.14
    3.14
"""

if __name__ == '__main__':
    pass
  1. Doctestセクションを右クリックすると、「一時的にDoctestを実行」するオプションが表示されます
  2. mainセクションを右クリックすると、「 'temp'を実行する」オプションが表示されます
  3. オプションのいずれかを選択すると、他のオプションは後続の実行で消えます。たとえば、runを選択すると、モジュールはDoctestsを実行するオプションを以降の実行で非表示にし、逆も同様です。モジュールの「実行構成」を削除することで、2つのオプションから選択できる最初のステージに戻ることができます。

実行->設定の編集->モジュールの現在の設定(通常は強調表示されています)を見つけます->「マイナス」ボタン(左上隅)をクリックします->「適用」をクリックします->「OK」をクリックします。ステップ3に戻ります。

PyCharm 5.0および4.5で複製)

要約する:

  • Run Configurationが見つからない場合、PyCharmはモジュールを可能な限りの方法で(スクリプト、doctest、またはユニットテストとして)実行することを提案します
  • Run Configurationが見つかった場合、PyCharmはConfigurationのみを提案します。
  • PyCharmが必要な実行オプションを提供していない場合は、そのオプションを提供できないRun Configurationを見つけて削除するか、または新しいファイルまたはメソッド/関数を希望どおりに実行するもの。
12
asherbar

設定を削除したくない場合は、実行のショートカットキーを押すこともできます。プログラムを再開して(F9を押して)、選択肢の完全なリストをポップアップします。

10
dugloon

上記の場合しないでうまくいきます-モジュールがnotという名前であることを確認してくださいdoctest;競合が発生するため、例外が発生します。

0