6

すべての単体テスト データを JSON から YAML に変換したところ、コードのどこかで例外が発生しました。より具体的には、これは印刷されたトレースバックです。

トレースバック (最新の呼び出しが最後):
  ファイル「tests/test_addrtools.py」、95 行目、test_validate_correctable_addresses 内
    self.assertTrue(self.validator(addr), msg)
  ファイル "/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py"、608 行目、__call__ 内
    self.validate(addr)
  ファイル "/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py"、692 行目、検証中
    if self._correction_citytypo(addr): return
  ファイル "/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py"、943 行目、_correction_citytypo 内
    比率 = lev_ratio(古い都市、都市)
TypeError: 2 つの文字列または 2 つの Unicode が必要な比率

さて、943行目のファイル「addrtools.py」には、私の問題に対する答えが含まれています。例外が発生したスコープ内のold_cityandの型と値を確認したい。city私は常にこの種の問題を抱えておりpdb、例外が発生したスコープ内のローカルを検査するために使用する迅速で簡単な方法は、将来的に時間を大幅に節約します。


この質問への回答に掲載されている解決策を試してみましたが、事後分析機能によってpython2.7/unittest/main.py(231)runTests()に配置され、あまり役に立ちません。これは、例外がキャッチされ、ユニットテストコードから再発生したためだと思います。

4

2 に答える 2

5

それをラップします:

def debug_on(*exceptions):
    if not exceptions:
        exceptions = (AssertionError, )
    def decorator(f):
        @functools.wraps(f)
        def wrapper(*args, **kwargs):
            try:
                return f(*args, **kwargs)
            except exceptions:
                pdb.post_mortem(sys.exc_info()[2])
        return wrapper
    return decorator

例:

@debug_on(TypeError)
def buggy_function()
    ....
    raise TypeError
于 2012-10-02T12:16:36.220 に答える
1

unittest スーパーセットのノーズpdbには、テストが失敗したときに、ノーズをテスト ランナーとして使用しても問題ない場合にドロップするオプションがあります。

--pdb                 Drop into debugger on errors
--pdb-failures        Drop into debugger on failures
于 2012-10-02T16:45:07.623 に答える