2017-11-11 11 views
0

コンテキスト

私は単体テストのPythonアプリケーションを持っています。アプリケーションの半分は動作しており、非常に高いテスト精度があります。Pythonカバレッジ - スキップまたは模擬入力メソッド

アプリケーションでは、インストールのために一度のユーザー入力が必要です。

これは、コードを実行した場合、ユーザとの対話がなければならない、ということを意味します。


問題

Coverageは、カバレッジ・レポートのためのPythonのプラグインです。私はこのコマンドでカバレッジを使用します:

coverage run application.py 

私のアプリケーションを実行し、テストを行って、カバレッジレポートを配信します。

問題は、これらのテストを実行するコマンドが自分のアプリケーションを実行し、入力を提供する必要があることです。これは大したことではありませんが、私はJenkinsを使用してCIサーバーでそれを行うことはできません。


質問

私は、ユーザー入力なしでカバレッジ・ツールを実行します。私のテストでは、input関数が嘲笑されています。カバレッジなしですべてのテストを実行するとうまくいきます。カバレッジがユーザー入力を要求しないようにするにはどうすればよいですか

答えて

1

あなたはおそらく2つの異なるコードパス、テストを実行するための1つを持っている、そしてアプリケーションを実行するための1つの必要があります。

coverage run tests.py 

tests.pyは、実際のアプリケーションを実行し、必要に応じてメソッドをあざける、application.pyをインポートすると。

それとも、コマンドライン引数を介してユーザ入力を可能性があります:真のテストまたは合理的に嘲笑することはできません、あなたのアプリの一部がある場合

coverage run application.py --user=input --other="etc." 

は最後に、(それが起こる、あなたがに出て呼び出していると言いますテストでロードできないサードパーティの例外追跡ライブラリ/サービス)を使用している場合、coverageに指示の末尾に# pragma: no coverを追加することで、カバレッジを計算する目的でこれらの行を無視するよう指示することができますテスト:

my = "code" 
goes = "here" 

if debug: # pragma: no cover 
    call_untestable(code=True) 
    this_portion(ignored_for_coverage=True) 

covered_code = "yes, again!" 

はもっとここを参照してください:

http://coverage.readthedocs.io/en/coverage-4.2/excluding.html

+0

素晴らしい答えを。ありがとうございました! – Randy

関連する問題