を報告します。それは...除くabstractpropertiesは、私はの線に沿って抽象基本クラスを持っている
はこれに回避策ではない実際をテストすることが(私の知る限り)抽象クラスのインスタンス化として提起されている例外が発生しますありますすることができ、または私はちょうど< 100%のテストカバレッジを受け入れなければなりません?
もちろん、ABCMeta
の使用法を削除し、基本クラスをNotImpementedError
にすることもできますが、私は前者の方が好きです。
を報告します。それは...除くabstractpropertiesは、私はの線に沿って抽象基本クラスを持っている
はこれに回避策ではない実際をテストすることが(私の知る限り)抽象クラスのインスタンス化として提起されている例外が発生しますありますすることができ、または私はちょうど< 100%のテストカバレッジを受け入れなければなりません?
もちろん、ABCMeta
の使用法を削除し、基本クラスをNotImpementedError
にすることもできますが、私は前者の方が好きです。
抽象プロパティを正確に除外する方法はありませんが、わずかな変更を加えれば可能です。抽象的なプロパティでエラーを発生させる:
@abstractproperty
def myproperty(self):
raise NotImplementedError
次に、notImplementedErrorを発生させる行を無視するようにカバレッジ.pyに指示できます。 .coveragercファイルを作成し、それに入れて:あなたは常に無視したいかもしれないラインの種類についてのより多くのアイデアについては
[report]
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
# Don't complain if tests don't hit defensive assertion code:
raise NotImplementedError
を参照してください。私にとってhttp://nedbatchelder.com/code/coverage/config.html
を最善の解決策は何@Wesley言及されました例えば受け入れ答えに彼のコメントは、具体的に抽象プロパティのdocstringと「パス」に置き換えて、中:
class MyAbstractClass(object):
__metaclass__ = ABCMeta
@abstractproperty
def myproperty(self):
""" this property is too abstract to understand. """
私は、カスタムのロジックをスキップしている私の.coveragerc
:
[report]
exclude_lines =
pragma: no cover
@abstract
このようにして、すべての抽象メソッドと抽象プロパティはスキップされたものとしてマークされます。
私はIRCで '#pragma:no cover'について調べて、そのインラインで行った。私は抽象的なプロパティの実装を持っているファンではありません(目的を破ると思われるので、単にNotImplementedErrorを発生させたとしても)。 –
wait:すべての抽象プロパティに "#pragma:no cover"コメントを入れても大丈夫ですが、本体を "not NotImplementedError raise"に変更しても問題ありませんか?自分自身には、あなたが好きなソリューションを見つけられたらうれしいですね。 –
私は間違いなく最適な解決策ではないと確信していますが、そのようなインライン・ディレクティブを使用して、抽象基本クラス・モジュールの用途と利点を変更することをお勧めします。 –