2011-02-02 4 views
2

一部のPythonコードでは、私はforkを実行し、親プロセスが終了するまで子プロセスで何らかの処理を行います。 forkの後にはexecではありません。子プロセスを持つPyUnit

子プロセスがsys.exitで明示的に終了すると、PyUnitエラーが生成されるため、PyUnitでこのコードをテストする際に問題が発生します。

このコードは、以下の問題に生成

class TestClass(TestCase): 
    def test(self): 
     pid = os.fork() 
     if pid == 0: 
      sys.exit(0) 
     else: 
      os.waitpid(pid,0) 

これはエラー

Traceback (most recent call last): 
    File "test.py", line 15, in test 
    sys.exit(0) 
SystemExit: 0 
---------------------------------------------------------------------- 
Ran 1 test in 0.007s 

FAILED (errors=1) 

は、子プロセスが明示的に終了した場合PyUnitでは、テストを失敗しないようにいくつかの方法がありますか?

答えて

1

sys.exitはSystemExit例外をスローします。これは通常のようにバブルアップします。しかし、os._exit(0)はすぐに終了し、クリーンアップコードに実行する機会は与えません。これにより、PyUnitはテストを失敗することを含め、何もしません。したがって、テストコードでは、SystemExitをトラップして、代わりにos._exitを呼び出すことができます。

終了時に子プロセスが何らかの明示的なクリーンアップが起こることが予想される場合は、テストケースでそれを行う必要があります。

関連する問題