2016-03-22 34 views

答えて

1

私はそれが可能だろうとは思いません。 assertは、Pythonの文(関数ではない)であり、あらかじめ定義された動作をしています。これは言語要素であり、変更することはできません。言語を変更しても問題の解決にはなりません。言語によって提供されるものを使用して問題を解決する必要があります。

あなたができることは1つあります。アサートでは、失敗時には例外AssertionErrorが発生します。これは、仕事を完了させるために悪用される可能性があります。 assert statementをブロックTry-expectに配置し、そのブロック内にコールバックを実行します。それはあなたが探しているほど良い解決策ではありません。すべての主張でこれを行う必要があります。ステートメントの動作を変更することは、実行しないことです。

1

assertの代わりにAssertionErrorをオーバーロードしてみてください。元のアサーションエラーはpython2ではexceptions module、python3ではbuiltinsモジュールで利用可能です。

import exceptions 

class AssertionError: 
    def __init__(self, *args, **kwargs): 
     print("Log me!") 
     raise exceptions.AssertionError 
0

pyhamcrestを使用することをお勧めします。それは単に再実装することができる非常に美しいmatcherを持っています。また、自分で書くこともできます。

1

pytestが実際にアサート式を書き直すことがあるため、可能です。私はそれを行う方法を知らないか、それがいかに簡単であるかが、ここではアサート再書き込みがpytestに発生したときに説明するドキュメントです: https://docs.pytest.org/en/latest/assert.html

デフォルトでは、Pythonのバージョンがより大きいかと等しい場合2.6、py.testは、テストモジュール内のアサート文を書き換えます。

...

py.testは、インポート時にテストモジュールを書き換えます。新しいpycファイルを書き込むために インポートフックを使用してこれを行います。

理論的には、pytestコードを見て、それらの動作を確認したり、おそらく同様のことを行うことができます。詳細については

は、ベンジャミン・ピーターソンはpy.testの新しい主張[http://pybites.blogspot.com/2011/07/behind-scenes-of-pytests-new-assertion.htmlで]書き換えの舞台裏まで書いた

関連する問題