2012-02-08 5 views
15

私はPythonのunittestライブラリを使用していますが、すべてのテストは成功しますが、まだトレースバックを取得しています。テストは成功し、まだトレースバックを取得します

........ 
---------------------------------------------------------------------- 
Ran 8 tests in 0.020s 

OK 

Traceback (most recent call last): 
    File "C:\Users\Paul\Desktop\bloomfilter\test_bloomfilter.py", line 85, in <module> 
    unittest.main() 
    File "C:\Programming\PythonX86\Python27\lib\unittest\main.py", line 95, in __init__ 
    self.runTests() 
    File "C:\Programming\PythonX86\Python27\lib\unittest\main.py", line 231, in runTests 
    sys.exit(not self.result.wasSuccessful()) 
SystemExit: False 
>>> 
+1

[this](http://stackoverflow.com/questions/79754/unittest-causing-sys-exit)は何かを支援しますか? [例えば、exit = Falseをmainに渡します。 – DSM

答えて

13

Pythonシェルで実行しているように見えますが、例外をキャッチしてデバッグを続けることができます。コマンドラインから実行していた場合は、ライン

sys.exit(not self.result.wasSuccessful()) 

はあなたのプログラムがどのように相互作用するかに不慣れなら(これは直感に反するかもしれない成功を示しており、0の終了コードを使用してプログラムを終了しているだろうシェル)。しかし、インタプリタを実行しているので、例外が捕捉されます。

私はあなたのプログラムやテストに何も問題はないことを示唆しています。おそらくunittestsフレームワークはインタラクティブに実行されることを期待していませんでした。

1

これらのテストを実行するために使用しているものは、SystemExit例外をキャッチしてトレースバックを出力しています。例外をキャッチするコードを記述するときは、SystemExit(プログラムを終了するためにsys.exit()が呼び出されます)と通常KeyboardInterrupt(コントロール-Cによって呼び出されます)のように、実際にキャッチしたくない例外をキャッチしないように注意する必要があります。

6

エンドであなたのunittestのファイル:私は私のPythonパッケージで私の__main__.pyを想定したときに

if __name__ == '__main__': 
    unittest.main(exit=False) 
+0

'が真であるかどうかをチェックするべきではありません。しかし、このすべての代わりに、 'exit = False'を提供するべきです... –

6

が実行tracbackの終了を回避するために、 __name__"__main__"がありますが、私が発見してunittestsを実行したとき、私はそれらがexeであることがわかりましたcutedであるが、異なっている。__name__ - "package.__main__"

ので、私は単純なPythonスクリプトのように私の__main__.pyに以下のものが必要でした

if __name__ == '__main__': 
    main() 

だけではなく、

main() 

mainunittest.mainであれば、

if __name__ == '__main__': 
    main(exit=False) 
とそれを呼び出します

プロセスが必要な場合sのあなたが使用している場合

python -im package_name 

を呼び出している場合、対話モードに固執する:

python -m unittest discover 

を、私はexit=Falseは問題べきではないと思います。

1

sys.exit(not self.result.wasSuccessful())

が、私はこのに走った:

if __name__=='__main__': 
    try: 
     unittest.main() 
    except SystemExit as inst: 
     if inst.args[0] is True: # raised by sys.exit(True) when tests failed 
      raise 
+0

ここで最も完全で便利な答えです。私は遅い答えがそのような生の取引をどのように得るのが嫌い。 – CandiedOrange

関連する問題