2017-02-04 28 views
1

テストカバレッジ中にプライベートメソッドを除外する方法はありますか?私.coveragercでカバレッジ内のプライベートメソッドを除外します

私が試した:

[report] 
exclude_lines = 
    __* 

をしかし、すべてのmethdosを一覧表示することなく、それを行うにはどのような方法THERされるようlong_method_name

などのメソッドを除外しているようですか?私はプライベートにsimillar構文を持っているなど__add__などの方法がになりたい

EDIT

は、テストでが含まれています。 docsから

答えて

3

class MyObject(object): 
    def __init__(self): 
     blah1() 
     blah2() 

    def __repr__(self): # pragma: no cover 
     return "<MyObject>" 

除くIMO意味をなさない1つの設定オプションを持つすべてのプライベートメソッド - 1は、カバレッジ結果に見える場合、それは間違った仮定につながります。

+0

我々は唯一の公共をテストするために必要としている...

[report] exclude_lines = def __[^(]*[^_][(] 

が、これは狂気の取得一種である:

は、プライベートメソッドを除外するにはなく、特別な方法は、あなたがより複雑な正規表現を試すことができます私たちはprivateメソッドではなく、100以上のalbotのようになったので、どこでも '#pragma'を書くことはオプションではありません。それを行うためのハックはありますか? – MaLiN2223

+0

別のファイルで賢明なものから継承するAPI呼び出しを再設計し、プライベートメソッドをそれらのオブジェクトに入れ、現在インポートしているファイルを無視することができます。 – ti7

1

あなたの正規表現は1つ以上のアンダースコアと一致する__*でしたので、アンダースコアを含む行はすべて除外されます。これはあなたが望むものではありません。

これは二重のアンダースコアで始まる関数の任意の関数定義を除外するように動作するはずです:

[report] 
exclude_lines = 
    def __ 

これは私には悪いアイデアのように思えます。これらの機能が適切にテストされているかどうかを知る必要があります。あなたの公開APIから呼び出されます:呼び出される関数の範囲を測定していない場合、どのようにあなたの公開API関数が完全にテストされていると主張することができますか?

+0

これは私が探している回答に非常に近いですが、def __は__add__や__init__などのメソッドも除外しています(それらを含めるように私の質問を編集します)。 プライベートメソッドを除外する理由は、私が単体テストをしたくないGUI(pygame)モジュールの多くを持っていることです。GUIテストがあります。私は複数の設定ファイルを持っており、そのうちの1つではパブリックメソッドだけをテストする必要があります:) – MaLiN2223

+0

["私は単体テストのプライベートメソッドはありません。プライベートメソッドは、そのクラスのユーザに隠されるべきである実装の詳細です。メソッドはカプセル化を解除します。」](https://stackoverflow.com/a/105021/125507) – endolith

関連する問題