2012-08-31 32 views
5

私はDjangoプロジェクトに取り組んでいますが、これは純粋なPython unittest質問だと思います。Pythonのunittestに例外をキャッチしないようにするにはどうすればよいですか?

通常、テストを実行すると、例外がテストランナーによってキャッチされ、それに応じて処理されます。デバッグの目的のために

は、私がすなわちように、この動作を無効にする:

python -i manage.py test 

は通常通り、例外上でインタラクティブPythonシェルに侵入します。

どうすればよいですか?

EDIT:これまでの回答に基づいて、これは私が実現したものよりもDjango固有の質問のほうが多いようです。

答えて

4

django-noseテストランナーを使用できます。unittestテストで動作し、python manage.py test -v2 --pdbなどのテストを実行します。そして、鼻はpdbあなたのために実行されます。

+0

感謝を。私は、このようなさまざまな利点で多くのことを言及していると聞いたことがあります。それは私のto-doリストに載っていますが、今のところ、それを使わないでこれを行う方法があると思っています。標準のテストランナーでは不可能なのかどうかは分かりますか? – Ghopper21

+0

いいですね。しかし、あなたのコードで例外をキャッチしてpdbを実行することができます。 –

+0

参考書、私はdjango-noseをインストールする方法を理解しようとしています。それは私に今のところトラブルを与えている... http://stackoverflow.com/questions/12215520/how-to-get-django-nose-installed-correctlyを参照してください – Ghopper21

3

新しいアプリケーションdjango-pdbはこれをより良くし、通常のコードでテスト失敗またはキャッチされない例外を中断するモードをサポートします。

+0

興味深い!見ています... – Ghopper21

+0

+1、これは新しい 'manage.py test --pdb'フラグでうまく動作します。私は今、ジャンゴ・ノーズをインストールしようとしているので、2つのアプローチを比較することができます。 (Btw、私はdjango-pdbを他の方法で使っていますが、それは他のデバッグ機能の拡張です。) – Ghopper21

0

あなたはあなたのコード内で)、その後、CondCatches(あなたの例外を使用し、パッケージ内のモジュールでこのような何かを試みることができる:

# System Imports 
import os 

class NoSuchException(Exception): 
    """ Null Exception will not match any exception.""" 
    pass 

def CondCatches(conditional, *args): 
    """ 
    Depending on conditional either returns the arguments or NoSuchException. 

    Use this to check have a caught exception that is suppressed some of the 
    time. e.g.: 
    from DisableableExcept import CondCatches 
    import os 
    try: 
     # Something like: 
     print "Do something bad!" 
     print 23/0 
    except CondCatches(os.getenv('DEBUG'), Exception), e: 
     #handle the exception in non DEBUG 
     print 'Somthing has a problem!', e 
    """ 
    if conditional: 
     return (NoSuchException,) 
    else: 
     return args 

if __name__ == '__main__': 
    # Do SOMETHING if file is called on it's own. 
    try: 
     print 'To Suppress Catching this exception set DEBUG=anything' 
     print 1/0 
    except CondCatches(os.getenv('DEBUG'), ValueError, ZeroDivisionError), e: 
     print "Caught Exception", e 
関連する問題